Python:无限循环和GUI

时间:2011-08-16 17:42:56

标签: python loops wxpython infinite

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

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

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

提前致谢!

3 个答案:

答案 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中的技术就是使用计时器。