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

Python : How to deal with threads priority in Gtk3

我正在使用 Python、Gtk3 和 Glade 构建用户界面。我想同时更改 UI 上的几项内容(即启动动画并显示新文本),这会导致应用程序冻结。

我读到 Gtk 不是线程安全的,所以我没有使用 Thread 模块。 相反,我使用了 Glib.idle_add 和 Gdk.threads_add_idle 函数。我正在尝试更新树视图、显示一些文本并同时显示动画徽标。该应用程序可以运行,但会冻结几秒钟,然后所有内容同时出现。我尝试为线程设置不同的优先级,但它似乎无法解决问题。

Gtk.threads_add_idle(Glib.PRIORITY_DEFAULT, label.set_text, "text_to_set")
Gtk.threads_add_igle(GLib.PRIORITY_DEFAULT, function_to_display_logo)

我希望显示不同的文本、树视图和徽标时不会出现任何冻结。有谁知道我该如何解决这个问题?

请查看 https://github.com/f4iteightiz/UWR_scoreboard 中的脚本示例:GTK window 例如全部更新为 0,2(标签中出现的几个计时器的倒计时;我认为其他任何东西都可以被更新)并且它一直保持重新激活状态。没有明显的冻结。

我发现我的错误是什么。我使用 GLib.idle_add 函数的次数太多了,甚至在某些我根本用不着它的情况下也是如此。

例如在我的主要代码中:

Glib.idle_add(my_function,buffer)

但 my_function 看起来像这样 :

def myfuntion(buffer):
    GLib.idle_add(buffer.set_text,"text")

我删除了主代码中的 GLib.idle_add 调用,现在它可以正常工作了。