2011-08-16 173 views
3

我想用wxPython GUI編寫一個python程序。程序必須在後臺收集一些信息(無限循環),但此時GUI應該處於活動狀態。就像,如果我點擊某個按鈕,一些變量或其他信息必須改變,並且在新的循環中應該使用該變量而不是舊的。Python:無限循環和GUI

但我不知道該怎麼做。我認爲我必須使用線程,但我不知道如何使用它。

任何人都可以建議如何解決這個問題?

在此先感謝!

+0

可能重複的[Python/wxPython:在後臺連續工作](http://stackoverflow.com/questions/730645/python-wxpython-doing-work-continuously-in-the-background) – miku

+1

你是當你說你必須使用線程時正確。 GUI必須使用一個線程,其他任何處理都應該在另一個線程上。從一個簡單的線程示例開始,繼續前進。 http://stackoverflow.com/questions/7082529/python-infinite-loop-and-gui – styfle

回答

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 
0

您是否考慮過wxPython的定期調用你的事件處理程序,並在此進行後臺處理?這取決於你能夠將你的作品分成不同的部分,當然。請注意,您的後臺處理必須是非阻塞的,以便控制能夠及時返回到wxPython,以允許響應式GUI處理。不知道在wxPython中實現這種後臺處理的慣用方式是什麼,但是如果我正確記得(Py)Qt中的技術是使用計時器。