2012-05-21 52 views
0

我有運行WX Python GUI的主線程。主GUI爲用戶提供了一個圖形界面來選擇腳本(映射到python函數)和一個'Start'按鈕,該按鈕生成第二個線程(Thread#2)來執行選定的腳本。我遇到的問題是我無法獲得新的WX GUI(GUI2)來彈出並給用戶輸入數據的能力。從產生線程實例化新的WX Python GUI

# Function that gets invoked by Thread #2 
def scriptFunction(): 
    # Code to instantiate GUI2; GUI2 contains wx.TextCtrl fields and a 'Done' button; 
    # When 'Done' button is clicked, data entered in fields are process and second GUI is destroyed 
    gui2Frame = Gui2Frame(None, "Enter Data Gui") 
    gui2Frame.Show(True) 

    # This is where I need help. Cannot figure out how to pend for user input; 
    # In this example; my 'Done' button sets the Event flag 
    verifyEvent = threading.Event() 
    verifyEvent.wait(10) 

    # Process entered data time 
    processData() 

目前,這種方法鎖定GUI2 10秒。這是有道理的,因爲產生的線程被鎖定。用time.sleep()實現while循環,也是這樣。我看着第三個線程產生,只是爲了處理GUI2,但我又回到不知道如何讓GUI2處於活動狀態。有什麼建議麼?此外,請不要將多線程體系結構更改爲一個線程;謝謝。

回答

0

在一個程序中不能有兩個wxPython主循環。你真的必須使用第一個wxPython程序的主線程。如果你想產生另一個應用程序,然後使用子進程。像這樣的東西應該工作:

import subprocess 
subprocess.Popen("python path/to/myscript.py") 
+0

謝謝,我感謝您的迴應,回答爲什麼我不能得到它的工作以及解決方法是什麼。我現在正在讀取子進程,但是,我很難讓GUI2子進程返回數據到第一個進程(線程#2)。我目前有以下代碼。 ---對不起,再給我幾分鐘,試圖想象如何進入一個新行以發佈一個乾淨的帖子 –

+0

由於我的後續問題的複雜性,我發佈它作爲一個新的問題。如果你不介意,你可以看看我的新職位邁克。謝謝! http://stackoverflow.com/questions/10689186/returning-data-to-the-original-process-that-invoke-a-subprocess –