GTK + не является потокобезопасным, поэтому вам не следует просто вызывать методы обновления GUI из других потоков. glib.idle_add (или gobject.idle_add в более старых версиях PyGTK) можно использовать для этой цели.
Вместо записи:
label.set_text("foo")
вы бы написали:
glib.idle_add(label.set_text, "foo")
, что вызывает вызов функции в очереди в GTK +.
Если вам нужно запустить несколько операторов, часто проще заключить их в функцию:
def idle():
label1.set_text("foo")
label2.set_text("bar")
glib.idle_add(idle)
Убедитесь, что функция, переданная в idle_add
, не возвращает True
; в противном случае он снова будет поставлен в очередь.
Редактировать: Как указал Даниэль, сначала вам нужно позвонить gtk.gdk.threads_init()
в любую точку вашей программы.