Python:如何处理Gtk3中的线程优先级

时间:2019-05-10 14:20:41

标签: python multithreading gtk3 glib glade

我正在使用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)

我希望显示的文本不同,树视图和徽标不会冻结。有谁知道我该如何解决?

2 个答案:

答案 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调用,现在可以正常使用了。