【问题标题】:Python: Infinite loop and GUIPython:无限循环和 GUI
【发布时间】:2011-10-28 07:01:46
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

标签: python loops wxpython infinite


【解决方案1】:

这称为“线程”。使用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】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-11-04
        • 2021-02-21
        • 2023-01-31
        • 2017-10-13
        • 1970-01-01
        • 2017-10-13
        • 2017-10-12
        • 2020-11-30
        相关资源
        最近更新 更多