作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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 - 使用 PyGtk 时 GUI 未从另一个线程更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066767/
我是一名优秀的程序员,十分优秀!