我正在使用Python,Gtk3和Glade构建用户界面。我想同时更改UI上的几项内容(即启动动画并显示新文本),这导致应用程序冻结。
我已经读到Gtk不是线程安全的,所以我没有使用Thread模块。 相反,我使用了Glib.idle_add和Gdk.threads_add_idle函数。我是tryig来更新树视图,同时显示一些文本和显示动画徽标。该应用程序可以运行,但是冻结了几秒钟,然后所有内容同时显示。我尝试为线程设置不同的优先级,但似乎无法解决问题。
Gtk.threads_add_idle(Glib.PRIORITY_DEFAULT, label.set_text, "text_to_set")
Gtk.threads_add_igle(GLib.PRIORITY_DEFAULT, function_to_display_logo)
我希望显示的文本不同,树视图和徽标不会冻结。有谁知道我该如何解决?
答案 0 :(得分:0)
请在这里查看https://github.com/f4iteightiz/UWR_scoreboard中的脚本示例:例如,GTK窗口将全部更新为0,2(标签中出现了几个计时器的倒计时;我认为还有其他可以更新的内容)并且它保持不变重新激活整个时间。没有明显的冰冻。
答案 1 :(得分:0)
我发现我的错误是什么。即使在没有使用它的情况下,我也使用GLib.idle_add函数太多次。
例如,在我的主代码中:
Glib.idle_add(my_function,buffer)
但是my_function看起来像这样:
def myfuntion(buffer):
GLib.idle_add(buffer.set_text,"text")
我在主代码中删除了GLib.idle_add调用,现在可以正常使用了。