我正在尝试使用 wxPython GUI 编写一个 python 程序。程序必须在后台收集一些信息(无限循环),但此时 GUI 应该处于活动状态。就像,如果我单击某个按钮,某些变量或其他信息必须更改,并且在新的循环中应该使用这个变量而不是旧的。
但是不知道怎么弄 我认为我必须使用线程,但我不明白如何使用它。
任何人都可以建议如何解决这个问题?
提前致谢!
您肯定需要使用线程来完成此操作。然后当你从非 GUI 线程获取一些数据时,你可以使用 wxPython 的线程安全方法之一让它知道它需要更新。这是一个小教程: http: //www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
或常年的最爱:http ://wiki.wxpython.org/LongRunningTasks
另一种方法是使用 Python 的 socket 模块创建一个套接字服务器并以这种方式与 wx 通信。
您是否考虑过让 wxPython 定期调用您的事件处理程序,并在其中执行后台处理?当然,这取决于您是否能够将您的工作分成离散的部分。请注意,您的后台处理必须是非阻塞的,以便控制及时返回到 wxPython,以允许响应式 GUI 处理。不确定在 wxPython 中实现此类后台处理的惯用方式是什么,但如果我没记错的话,(Py)Qt 中的技术是使用计时器。
这称为“线程”。使用pythons 线程模块。
两个例子:
示例 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