我有点像Python新手,我自己学习它,我只能说它是一种很棒的编程语言。即使我正在以直接的方式学习它,现在我知道(作为初学者)如何使用GTK,线程,urllib和其他模块。
但我需要有经验的PyGTK用户的回答。看看图片中的这个小例子:
http://i.stack.imgur.com/y10nv.png
在这个概念应用程序(它没有工作代码)中,当用户从Gtk.TreeView中选择一行时,我将显示从Web获取的一些行特定数据(每行的URL不同)。因此,当用户单击某行时,将启动一个线程(不冻结GUI)从URL获取数据。成功获取数据后,将调用一个回调,显示位于列表下的Gtk.Label中的内容。
问题在于,如果用户快速选择一些不同的行,那么......会有一些混乱,因为某些请求可能需要比其他请求更长的时间,并且所选行与数据显示器之间将存在“失步”在Gtk.Label。我知道正在运行的线程无法从外部停止(即使我找到了一个可以实现此功能的线程模块),那么防止Gtk.Label与当前选择失去同步的最佳方法是什么?
我很抱歉我的英语不好以及我的愚蠢问题。目前,我设法通过将所选行中的文本与我希望从请求的URL中获得的内容进行比较来解决此问题,但我认为有更好的方法来管理它。
非常感谢, Ovidiu Nitan
答案 0 :(得分:1)
听起来你已经做了明显的事情。在你的回调函数中,只需检查它来自哪个URL与当前选择的行匹配,如果不匹配,则忽略它。
答案 1 :(得分:0)
只有运行mainloop的线程才会更新GUI,因此下载工作人员无论如何都必须进行回传,例如使用idle_add。这允许您在启动线程时传递令牌,如简单计数器或选定的TreeIter,并比较返回到您发送的最后一个结果的任何结果。只有匹配时才设置标签。