【发布时间】:2015-10-29 21:47:50
【问题描述】:
我正在用 Python 创建一个应用程序,它使用 GTK 来构建 UI,我对在线程上处理 GTK 对象(例如 GtkProgressBar 对象)有点困惑。
这里是上下文:
我尝试在主线程上进行下载,并添加GObject.timeout_add 以使条形脉冲直到下载结束。但是在第一个脉冲之后,UI 冻结了。
直到那里OK,线程冻结直到下载完成,所以任何组件都将被更新。解决方案:创建一个新线程。
我创建了这个新线程来进行下载和其他事情。在这个线程上,我收到进度条来进行更新。但是,当下载运行时,我添加了GObject.timeout_add 来脉冲栏,UI 再次冻结。新解决方案:创建第三个线程。
所以我的线程看起来像这样:
Main-Thread
'---- Thread 1
'------Thread 2
所以,在Thread 1 上,我制作了另一件事并更新了 UI,而在Thread 2 上我进行了下载并添加了GObject.timeout_add,在那里我可以更新进度条。在Thread 1 我加入Thread 2
我使用GObject.idle_add 函数处理 Gtk 对象。
但我很困惑为什么进度条的下载和更新在Thread 2 上运行良好而不在Thread 1 上运行良好
有人可以向我解释为什么会发生这种情况,或者如果我错过了有关处理 GTK 对象的一些内容。
谢谢
【问题讨论】:
标签: python multithreading pygtk pygobject