线程仅适用于gui事件pygtk

时间:2013-03-31 07:01:42

标签: python multithreading pygtk

我正在使用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事件时它才会更新为什么会这样?为什么线程没有在后台运行?

1 个答案:

答案 0 :(得分:1)

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

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

不要忘记致电gtk.gdk.thread_init()。最好在导入GTK之后。

您可以通过Google搜索“pygtk multithreading”找到更多示例like this one