2013-10-13 48 views
2

我想在運行Windows 7的Python 3中編寫程序。我希望程序能夠在窗口中顯示文本並同時播放音頻文件。我可以在不同的時間順利完成這兩個流程。我如何在同一時間完成這些流程?下面是從程序取的代碼塊:如何在Python中一次運行2個不同的進程

 import lipgui, winsound, threading 
    menu = lipgui.enterbox("Enter a string:") 
    if menu == "what's up, lip?": 
     t1 = threading.Thread(target=winsound.PlaySound("C:/Interactive Program/LIP Source Files/skyisup.wav", 2), args=(None)) 
     t2 = threading.Thread(target=lipgui.msgbox("The sky is up"), args = (None)) 
+0

能否請您提前從已給出,其中表現出更多的代碼。你現在的代碼發生了什麼?它應該工作,並使兩者同時運行。 –

+0

編輯它。這是完整的腳本。它仍然在不同的時間做它們! –

回答

2

Threadtarget參數必須指向以執行功能。您的代碼在將其傳遞給target之前對其進行評估。

t1 = threading.Thread(target=winsound.PlaySound("C:/Interactive Program/LIP Source Files/skyisup.wav", 2), args=(None)) 
t2 = threading.Thread(target=lipgui.msgbox("The sky is up."), args = (None)) 

在功能上等同於:

val1 = winsound.PlaySound("C:/Interactive Program/LIP Source Files/skyisup.wav", 2) 
t1 = threading.Thread(target=val1, args=(None)) 
val2 = lipgui.msgbox("The sky is up.") 
t2 = threading.Thread(target=val2, args=(None)) 

你真正想要做的是隻傳遞它是評估前的功能target並傳遞要傳遞給參數在實例化Thread時參數args中的所需功能。

t1 = threading.Thread(target=winsound.PlaySound, args=("C:/Interactive Program/LIP Source Files/skyisup.wav", 2)) 
t2 = threading.Thread(target=lipgui.msgbox, args=("The sky is up.",)) 

現在t1和t2包含線程實例,其中引用了您想要與參數並行運行的函數。他們仍然沒有運行代碼。要做到這一點,你需要運行:

t1.start() 
t2.start() 

確保你不叫t1.run()t2.run()run()是線程的一種方法,start()通常在新線程中運行。

最後的代碼應該是:

import lipgui 
import winsound 
import threading 

menu = lipgui.enterbox("Enter a string:") 
if menu == "what's up, lip?": 
    t1 = threading.Thread(target=winsound.PlaySound, args=("C:/Interactive Program/LIP Source Files/skyisup.wav", 2)) 
    t2 = threading.Thread(target=lipgui.msgbox, args=("The sky is up",)) 

    t1.start() 
    t2.start() 
+0

對不起,回覆遲!現在,當我運行它時,它播放音頻,程序繼續運行,但它不顯示GUI! –

+0

你好?我仍然無法弄清楚這一點! –

+0

你能發佈一些更新的代碼嗎? –

相關問題