在一个单独的线程中,我检查pySerial缓冲区(无限循环)中的信息。如果有新的信息可用,我想在Gtk.TextView
中显示该输入。在google上搜索这个主题后,发现在线程中做Gtk-Stuff是个杀手。随机错误会出现等等,这也是我遇到的一个问题。在
我决定使用一个队列来同步线程和GUI。将信息放入队列非常简单,但是如果队列中有任何条目,我应该如何检查主循环?在
如果有新的信息可以触发一些事件。在
有那种东西吗?可能存在一个函数来实现GTK3+mainloop中的自定义python代码?在
Tags:
找到了解决方案:
http://www.pygtk.org/pygtk2reference/gobject-functions.html#function-gobject timeout-add
此GObject函数每隔X毫秒实现一次对自己函数的回调。在这里找到了一个非常简单的解释:
https://gist.github.com/jampola/473e963cff3d4ae96707
所以我可以每隔X毫秒把从队列收集到的所有信息都记录下来。处理线程的好方法!在
为了从线程中的事件成功地定期更新GUI,我们不能简单地使用
threading
来启动第二个进程。就像你提到的,这会导致冲突。在这里是
GObject
的位置,当它被放入this (slightly outdated) link时:当我们将}替换为
gobject.threads_init()
替换为GObject.threads_init()
,将{GObject.idle_add()
,我们几乎有了如何在Gtk应用程序中运行线程的更新版本。一个简化的示例,显示文本字段中猴子数量的增加。请参见代码中的注释:例如,计算文本视图中更新的猴子数量:
……
相关问题 更多 >
编程相关推荐