gpt4 book ai didi

python - 如何在 pygtk 中使用线程

转载 作者:太空狗 更新时间:2023-10-30 00:30:48 25 4
gpt4 key购买 nike

我在 pygtk 中遇到线程问题。我的应用程序包含一个从 Internet 下载图片然后用 pygtk 显示它的程序。问题是为了做到这一点并保持 GUI 响应,我需要使用线程。

因此,在用户单击“下载图片”按钮后,我进入了回调,我调用了该方法来下载同一类中的图片。

thread.start_new_thread(self.images_download, (path,pages)

这行不通。让我的程序进入线程的唯一方法是使用

gtk.threads_init()

在启动任何线程之前。现在它下载了图片,但 GUI 仍然没有响应。我用谷歌搜索了这个,并尝试将 gtk.threads_enter 和 gtk.threads_leave 放在线程周围,但它不起作用。

最佳答案

你的问题有点含糊,如果不引用你的实际代码,很难推测你做错了什么。

所以我会给你一些阅读指南,然后根据经验进行疯狂推测。

首先,您似乎认为只能通过使用线程来保持 GUI 响应。这不是真的。您还可以异步编写代码,并在单线程应用程序中执行所有操作。 Twisted建立在这个编程模型之上。我最近made a blog post这解释了我如何创建一个异步任务接口(interface),以及 CLI 和 GTK+ 的示例运行程序。您可以查看这些示例,了解如何异步执行任务,并且 UI 仍会得到更新。

其次,如果您出于某种原因更喜欢使用线程,则需要稍微了解 GTK+ 线程模型。

您应该先阅读 The PyGTK FAQ entry on the subject , 你可能会发现 this blog post也很容易理解。

现在,继续猜测。我猜你正试图从线程更新你的 GTK UI,而不是正确处理锁定。如果是这种情况,您现在最好使用 gobject.idle_add() 将您想要执行的所有 UI 更新从线程推迟到主线程。这样,所有 UI 调用都将从主线程进行。这是一种更容易在您的编程中遵循的心智模型。

一旦您觉得您真正理解了线程和锁定模型,您可以考虑从线程更新 UI,但很容易错过 threads_enter()/threads_leave()

关于python - 如何在 pygtk 中使用线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/809818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com