0

我正在 pygtk 中开发一个多线程应用程序,使用快速并卡在线程中。所以我正在尝试各种可能性,发现我的线程只有在我在 gui 中执行某些操作时才有效这是我的代码

t = threading.Thread(target=self.calc,args=(treeiter))
t.daemon = True
t.start()

    def calc(self,treeiter):
        store=self.builder.get_object('liststore1')
        per=0
        while 1:
            print "Calcing and changing percent,per="+str(per)
            store.set_value(treeiter,4,str(int(per))+"%")
            per+=1
            time.sleep(1)

我正在尝试liststore按线程更新值,但只有当我单击某个按钮或其他一些 gui 事件时它才会更新,为什么会这样?为什么线程不在后台运行?

4

1 回答 1

1

GTK+ 是线程感知的,但不是线程安全的。

如果您想在除主线程(调用 的线程gtk.main())之外的其他线程中使用 GTK+,请确保将任何 GTK+ 调用放在 agtk.gdk.threads_enter()gtk.gdk.threads_leave(). 这将获取和释放全局互斥锁。

别忘了打电话gtk.gdk.thread_init()。最好是在导入 GTK 之后。

您可以通过谷歌搜索“pygtk 多线程”找到更多类似的示例。

于 2013-03-31T09:00:43.100 回答