app*_*eev 6 python multithreading pygtk
我正在使用PyGTK来构建GUI应用程序.我想从另一个线程更新textview小部件,但每次尝试更新时小部件都不会更新.我该怎么做才能获得可靠的GUI更新?
Joh*_*gko 13
GTK +不是线程安全的,因此您不应该简单地从其他线程调用GUI更新方法.glib.idle_add(或旧的PyGTK版本中的gobject.idle_add)可用于此目的.
而不是写:
label.set_text("foo")
Run Code Online (Sandbox Code Playgroud)
你会写:
glib.idle_add(label.set_text, "foo")
Run Code Online (Sandbox Code Playgroud)
这导致函数调用在GTK +中排队.
如果需要运行多个语句,通常更容易将它们包装在函数中:
def idle():
label1.set_text("foo")
label2.set_text("bar")
glib.idle_add(idle)
Run Code Online (Sandbox Code Playgroud)
确保传递给的函数idle_add不返回True; 否则它将再次排队.
编辑:正如丹尼尔指出的那样,你需要先gtk.gdk.threads_init()在你的程序中的任何地方打电话.
| 归档时间: |
|
| 查看次数: |
3098 次 |
| 最近记录: |