我是Python的新手,我正在自学,我要说的是它是一门很棒的编程语言。即使我是以直接的方式学习它,但现在我(作为初学者)知道如何使用GTK、线程、urllib和其他模块。
但我需要有经验的PyGTK用户的回答。看看图中的这个小例子:
http://i.stack.imgur.com/y10nv.png
在这个概念应用程序中(它没有可用的代码),当用户从Gtk.TreeView中选择一行时,我将显示一些从web获取的特定于行的数据(每行的URL都不同)。因此,当用户单击一行时,将启动一个线程(以避免冻结GUI),以从URL获取数据。成功获取数据后,将调用一个回调函数来显示列表下的Gtk.Label中的内容。
问题是,如果用户快速选择了一些不同的行,那么...会有一点混乱,因为一些请求可能比其他请求花费更长的时间,并且在Gtk.Label中选定的行和数据显示器之间将会出现“去同步”。我知道运行中的线程不能从外部停止(即使我发现了一个线程模块可以实现这一点),那么防止Gtk.Label与当前选择不同步的最好方法是什么?
我为我糟糕的英语和愚蠢的问题道歉。目前,我通过将选定行中的文本与我希望从请求的URL中获得的文本进行比较来解决此问题,但我认为有更好的方法来管理此问题。
非常感谢,奥维迪乌·尼坦
发布于 2010-12-14 04:53:27
听起来你已经在做一件显而易见的事情了。在回调函数中,只需检查它所来自的URL是否与当前选定的行匹配,如果不匹配,则忽略它。
发布于 2010-12-15 20:43:13
只有运行主循环的线程才能更新图形用户界面,因此您的下载工作者无论如何都必须进行通信,例如使用idle_add。这允许您在启动线程时传递一个令牌,如简单的计数器或选定的TreeIter,并将返回的任何结果与上次发送的结果进行比较。只有在匹配时才能设置标签。
https://stackoverflow.com/questions/4432015
复制相似问题