2012-10-02 118 views
0

我正在使用Wxpython中的GUI編寫用python編程的項目,最後3個不眠之夜現在我碰到了。其實主內部我在另一個線程執行一個新的子幀,我想要的是停止進一步的代碼執行,直到其子幀完成其工作並關閉。 我嘗試過使用threading.Thread.join()方法,但它似乎不能有效地工作,並且在主父框架關閉後掛起。 有沒有任何有效的方法來做這件事?WxPython:如何停止在主父框架中的進一步代碼執行,直到其子框架已關閉

+0

犯規WX告訴你專門從主線程推出的所有幀? ...爲什麼你不把線程分開去做工作? (也許看看你是否真的需要線程...... GIL使它們比線程通常稍微有用... –

+0

@JoranBeasley okey ...但是如何停止進一步執行主父幀代碼直到它的子幀有完成它的工作並關閉 –

+1

然後,你只是繼承'wx.Dialog'而不是'wx.Frame'和'ShowModal'而不是Show' –

回答

3

使用wx.Dialog而不是子框架及其ShowModal()方法來停止主框架的執行。從技術上講,您也可以使用框架的MakeModal()方法獲得類似效果,但我認爲使用對話框更有意義。順便說一下,在使用wxPython(或任何GUI工具包)的線程時,必須使用工具包的線程安全方法來更新GUI。您不應該嘗試直接從線程訪問GUI元素,因爲這是未定義的行爲。相反,使用wx.CallAfter,wx.CallLater或wx.PostEvent,因爲它們是wxPython的線程安全方法。

參見:

+0

Mike知道他的wx的東西; P ...顯然在解釋比我在評論:) –

+0

謝謝!你有正確的想法,我只是將答案形式化了一下,並認爲應該有關於如何使用wx的線程的解釋,因爲這可能是一個粘性主題。 –

相關問題