zim*_*mio 5 python multithreading pygtk
我在pygtk中遇到线程问题.我的应用程序包含一个程序,可以从互联网上下载图片,然后用pygtk显示它.问题是,为了做到这一点并保持GUI响应,我需要使用线程.
所以我在用户点击"下载图片"按钮后进入回调,然后我调用该方法下载同一类中的图片.
thread.start_new_thread(self.images_download,(path,pages)
这不行.我让我的程序进入线程的唯一方法是使用
gtk.threads_init()
在开始任何线程之前.现在它下载图片但GUI仍然没有响应.我用谷歌搜索了这个,我尝试将gtk.threads_enter和gtk.threads_leave放在线程周围,但它不起作用.
Tho*_*ele 12
你的问题有点模糊,如果没有参考你的实际代码,很难推测你做错了什么.
所以我会给你一些阅读的指示,然后根据经验疯狂推测.
首先,您似乎认为只能通过使用线程来保持GUI响应.这不是真的.您还可以异步编写代码,并在单线程应用程序中执行所有操作. Twisted建立在这个编程模型上.我最近写了一篇博文,解释了我是如何为CLI和GTK +创建异步任务界面和示例运行器的.您可以查看这些示例,了解如何异步实现任务,并且UI仍然会更新.
其次,如果您出于某种原因喜欢使用线程,则需要稍微了解GTK +线程模型.
您应该首先阅读关于该主题的The PyGTK FAQ条目,您可能也会发现此博客文章也很容易理解.
现在,关于猜测.我猜你正在尝试从线程更新你的GTK UI,而不是正确处理锁定.如果是这种情况,那么现在最好通过使用gobject.idle_add()将您想要做的所有UI更新从线程推迟到主线程.这样,所有UI调用都将从主线程进行.在编程中遵循一个更容易的心智模型.
一旦您认为自己真正理解了线程和锁定模型,就可以考虑从线程更新UI,但很容易错过threads_enter()/ threads_leave()
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |