首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyGTK和线程

PyGTK和线程
EN

Stack Overflow用户
提问于 2010-12-14 02:11:25
回答 2查看 257关注 0票数 1

我是Python的新手,我正在自学,我要说的是它是一门很棒的编程语言。即使我是以直接的方式学习它,但现在我(作为初学者)知道如何使用GTK、线程、urllib和其他模块。

但我需要有经验的PyGTK用户的回答。看看图中的这个小例子:

http://i.stack.imgur.com/y10nv.png

在这个概念应用程序中(它没有可用的代码),当用户从Gtk.TreeView中选择一行时,我将显示一些从web获取的特定于行的数据(每行的URL都不同)。因此,当用户单击一行时,将启动一个线程(以避免冻结GUI),以从URL获取数据。成功获取数据后,将调用一个回调函数来显示列表下的Gtk.Label中的内容。

问题是,如果用户快速选择了一些不同的行,那么...会有一点混乱,因为一些请求可能比其他请求花费更长的时间,并且在Gtk.Label中选定的行和数据显示器之间将会出现“去同步”。我知道运行中的线程不能从外部停止(即使我发现了一个线程模块可以实现这一点),那么防止Gtk.Label与当前选择不同步的最好方法是什么?

我为我糟糕的英语和愚蠢的问题道歉。目前,我通过将选定行中的文本与我希望从请求的URL中获得的文本进行比较来解决此问题,但我认为有更好的方法来管理此问题。

非常感谢,奥维迪乌·尼坦

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-14 04:53:27

听起来你已经在做一件显而易见的事情了。在回调函数中,只需检查它所来自的URL是否与当前选定的行匹配,如果不匹配,则忽略它。

票数 1
EN

Stack Overflow用户

发布于 2010-12-15 20:43:13

只有运行主循环的线程才能更新图形用户界面,因此您的下载工作者无论如何都必须进行通信,例如使用idle_add。这允许您在启动线程时传递一个令牌,如简单的计数器或选定的TreeIter,并将返回的任何结果与上次发送的结果进行比较。只有在匹配时才能设置标签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4432015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档