【问题标题】:Python : How to deal with threads priority in Gtk3Python:如何处理 Gtk3 中的线程优先级
【发布时间】:2019-05-10 14:20:40
【问题描述】:

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

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

【问题讨论】:

标签: python multithreading gtk3 glib glade


【解决方案1】:

请在此处查看https://github.com/f4iteightiz/UWR_scoreboard 中的脚本示例:例如,GTK 窗口更新为所有 0,2 秒(标签中出现多个计时器的倒计时;我认为可以更新任何其他内容)并且它保持重新激活全程。没有明显的冻结。

【讨论】:

    【解决方案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 调用,现在它可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2019-01-30
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多