3

我正在尝试使用 wxPython GUI 编写一个 python 程序。程序必须在后台收集一些信息(无限循环),但此时 GUI 应该处于活动状态。就像,如果我单击某个按钮,某些变量或其他信息必须更改,并且在新的循环中应该使用这个变量而不是旧的。

但是不知道怎么弄 我认为我必须使用线程,但我不明白如何使用它。

任何人都可以建议如何解决这个问题?

提前致谢!

4

3 回答 3

2

您肯定需要使用线程来完成此操作。然后当你从非 GUI 线程获取一些数据时,你可以使用 wxPython 的线程安全方法之一让它知道它需要更新。这是一个小教程: http: //www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

或常年的最爱:http ://wiki.wxpython.org/LongRunningTasks

另一种方法是使用 Python 的 socket 模块创建一个套接字服务器并以这种方式与 wx 通信。

于 2011-08-16T17:57:00.377 回答
0

您是否考虑过让 wxPython 定期调用您的事件处理程序,并在其中执行后台处理?当然,这取决于您是否能够将您的工作分成离散的部分。请注意,您的后台处理必须是非阻塞的,以便控制及时返回到 wxPython,以允许响应式 GUI 处理。不确定在 wxPython 中实现此类后台处理的惯用方式是什么,但如果我没记错的话,(Py)Qt 中的技术是使用计时器。

于 2011-08-16T18:17:50.553 回答
0

这称为“线程”。使用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
于 2011-08-16T17:53:23.000 回答