我想用wxPython GUI編寫一個python程序。程序必須在後臺收集一些信息(無限循環),但此時GUI應該處於活動狀態。就像,如果我點擊某個按鈕,一些變量或其他信息必須改變,並且在新的循環中應該使用該變量而不是舊的。Python:無限循環和GUI
但我不知道該怎麼做。我認爲我必須使用線程,但我不知道如何使用它。
任何人都可以建議如何解決這個問題?
在此先感謝!
我想用wxPython GUI編寫一個python程序。程序必須在後臺收集一些信息(無限循環),但此時GUI應該處於活動狀態。就像,如果我點擊某個按鈕,一些變量或其他信息必須改變,並且在新的循環中應該使用該變量而不是舊的。Python:無限循環和GUI
但我不知道該怎麼做。我認爲我必須使用線程,但我不知道如何使用它。
任何人都可以建議如何解決這個問題?
在此先感謝!
這被稱爲「穿線」。使用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
你一定要使用線程來accompl這是。然後,當您從非GUI線程獲得一些數據時,可以使用wxPython的線程安全方法之一來讓它知道它需要更新。這裏有一個小教程:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
還是常年喜愛:http://wiki.wxpython.org/LongRunningTasks
另一種方式來做到這一點是使用Python的插座模塊創建一個套接字服務器,並通過與WX這種方式溝通。
您是否考慮過wxPython的定期調用你的事件處理程序,並在此進行後臺處理?這取決於你能夠將你的作品分成不同的部分,當然。請注意,您的後臺處理必須是非阻塞的,以便控制能夠及時返回到wxPython,以允許響應式GUI處理。不知道在wxPython中實現這種後臺處理的慣用方式是什麼,但是如果我正確記得(Py)Qt中的技術是使用計時器。
可能重複的[Python/wxPython:在後臺連續工作](http://stackoverflow.com/questions/730645/python-wxpython-doing-work-continuously-in-the-background) – miku
你是當你說你必須使用線程時正確。 GUI必須使用一個線程,其他任何處理都應該在另一個線程上。從一個簡單的線程示例開始,繼續前進。 http://stackoverflow.com/questions/7082529/python-infinite-loop-and-gui – styfle