我正在使用Python/wxWidgets編寫一個簡單的遊戲。使用線程控制wxPython中的UI元素
我已經寫了一個主窗口的類和一個簡單的類獲取用戶輸入的另一個框架。
我到目前爲止的體系結構是,該應用程序啓動並運行第二個運行稱爲「gameLogic」的函數的線程。主線程然後進入主應用程序循環。
gameLogic線程按順序運行,需要控制UI。例如,它需要打開一個以主框架作爲其父項的新對話框。但是,我發現這樣做最終會導致崩潰(足以導致OS X中的報告崩潰窗口)。
我一直在四處尋找和收集,我需要重構使用事件,但什麼我不知道如何做的是創建自己的事件。我可以讓我的gameLogic線程在主窗口中引發一個事件,然後調出輸入對話框並等待輸入(模態),然後將該數據返回給gameLogic線程。 gameLogic線程在等待時可能會阻塞,因爲UI線程是分開的。
在我的主框架的函數(事件處理程序),我可以創造一個輸入對話框的新實例,顯示它模態,然後獲得輸入。
我已經看到了實現這一點的各種想法,但一直沒能找到一個很好的例子來說明如何在我的wxFrame對象中創建自定義事件並從另一個線程調用它,邏輯線程塊並等待輸入回來,然後如何將輸入返回給gameThread。
忠告非常感謝!
[此博客文章](http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/)顯示瞭如何創建和發送自定義事件(以及如何使用'CallAfter '和'發佈者',這對於簡單的情況通常更簡單)。至於有邏輯線程塊...如果你只是想阻塞,使用正常的線程同步;你不需要任何幻想。 – abarnert 2013-05-09 00:49:25