python – 使用PyGtk时,GUI未从其他线程更新

前端之家收集整理的这篇文章主要介绍了python – 使用PyGtk时,GUI未从其他线程更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用PyGTK来构建GUI应用程序.我想从另一个线程更新textview小部件,但每次尝试更新时小部件都不会更新.我该怎么做才能获得可靠的GUI更新?

解决方法

GTK不是线程安全的,因此您不应该简单地从其他线程调用GUI更新方法. glib.idle_add(或旧的PyGTK版本中的gobject.idle_add)可用于此目的.

而不是写:

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;否则它将再次排队.

编辑:正如Daniel指出的那样,你需要先在程序的任何地方调用gtk.gdk.threads_init().

猜你在找的Python相关文章