試圖從wxpython GUI運行耗時的任務。基本的想法是從GUI開始長時間的任務(按下一個按鈕),然後在對話框上的靜態文本應該從中更新。wxpython GUI和多處理 - 如何從長時間運行的進程發回數據
首先我嘗試了一些線程(http://wiki.wxpython.org/LongRunningTasks和許多其他資源),並且我想使用Publisher.class顯示消息。它沒有那麼好,在一條或兩條消息之後,GUI似乎被凍結了。
現在我想通過多處理實現這一點。我有這個方法我「GUI」類中:
def do_update(self, e):
self.txt_updatemsg.SetLabel("Don't stop this \n")
...
pub = Publisher() # i tried also calling directly from dbob object
# Publisher() is a singleton so this must be useless?
pub.subscribe(self.__update_txt_message, ('updatedlg', 'message'))
dbob = dbutils.DBUtils() # DBUtils is the class with 'long time' tasks
dbob.publisher = pub
p = Process(target=self.do_update_process, args=(dbob,))
p.start()
while p.is_alive:
wx.Yield
def do_update_process(self, dbob):
dbob.do_update()
__update_txt_message是一個簡單的功能,什麼套在對話框中的靜態文本。
問題是:我怎樣才能從這個過程發回一些短信(只是簡單的文本,這就是我需要的) 謝謝你們!
後一些更多的工作,我最終在__update_txt_message方法(連接到Publisher類)的正確的信息。如果我把打印message.data它的作品,我可以在控制檯中看到它。但它不會更新靜態文本。所以現在的問題是:我如何強制更新?仍在挖... – wxpydon 2010-05-18 14:48:05
你爲什麼放棄使用線程?通常,最好的解決方案是爲長時間運行的進程使用線程,並使用隊列在主線程和長時間運行的進程線程之間進行通信。 – 2010-05-19 03:19:31
嗯,我不認爲現在的問題是使用線程或進程。我能夠在__update_txt_message中獲取所需的消息,但從那裏我無法更改靜態標籤,這看起來很奇怪。我可以將消息打印到控制檯,我可以使用SetLabel,然後使用GetLabel查看,確定消息存在,但不顯示對話框! – wxpydon 2010-05-19 05:54:56