我正在尝试用wxPython GUI编写一个python程序。程序必须在后台收集一些信息(无限循环),但此时GUI应该是活动的。就像,如果我点击某个按钮,某些变量或其他信息必须更改,并且在新周期中应使用此变量而不是旧变量。
但我不知道,怎么做。我认为我必须使用线程,但我不明白如何使用它。
任何人都可以建议如何解决这个问题?
提前致谢!
答案 0 :(得分:2)
您肯定需要使用线程来完成此任务。然后,当您从非GUI线程获取一些数据时,您可以使用wxPython的一个线程安全方法让它知道它需要更新。这是一个小教程:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
或常年的最爱:http://wiki.wxpython.org/LongRunningTasks
另一种方法是使用Python的套接字模块创建套接字服务器,并以这种方式与wx通信。
答案 1 :(得分:0)
这称为“线程”。使用pythons threading module。
两个例子:
示例1 :
from threading import Thread
class MyCollector(Thread):
def __init__(self, collect_from):
Thread.__init__(self) # must be called !
self.collect_from = collect_from
def run(self):
while True:
# .. collect ur things
collector_thread = MyCollector(my_source_to_collect_from)
collector_thread.start()
# go on with gui
示例2 :
from threading import Thread
def collector(collect_from):
while True:
# .. collect ur things
collector_thread = Thread(target = collector, args = (my_source_to_collect_from,))
collector_thread.start()
# go on with gui
答案 2 :(得分:0)
您是否考虑过让wxPython定期调用您的事件处理程序,并在此执行后台处理?当然,这取决于你能否将你的作品分成不同的部分。请注意,您的后台处理必须是非阻塞的,因此控制将及时返回到wxPython,以允许响应式GUI处理。不确定在wxPython中实现这种后台处理的惯用方法是什么,但如果我没记错,(Py)Qt中的技术就是使用计时器。