2017-02-26 45 views
0

用戶解決問題的時間有限。在該程序中,我同時運行一個音樂文件作爲GUI(tkinter)定時器,並且在時間到時它們都完成了。有些用戶可能會在早期完成。我想在關閉計時器窗口時使音樂停止。 'winsound'不接受'stop()',而我'winsound.SND_PURGE'沒有成功。這比我想象的更復雜。我試過這個:HALT(python 3)一個音樂文件?

# python 3.5  

winsound.PlaySound('The Countdown.wav', winsound.SND_FILENAME) 

root = Tk() # IMAGINE this is a box with a number ticking down 
root.mainloop() 

root.protocol("WM_DELETE_WINDOW", winsound.SND_PURGE) # nothing happens :(

有沒有使用標誌的方法?也許是另一個音頻文件播放器?什麼?

讓我知道如果你這樣做。謝謝!

回答

1

winsound.SND_PURGE只是一個整數常量,恰好具有64的值(此外,記錄爲「在現代Windows平臺上不支持」)。你期待root.protocol()與它做什麼?當窗口關閉時,您需要傳遞一個函數來調用。它看起來像:

lambda: winsound.PlaySound(None, 0) 

將是一個合適的停止聲音播放功能,雖然我沒有真正測試過它。

我認爲您還需要將winsound.SND_ASYNC添加到原始PlaySound調用的標誌,否則在聲音完成前您的窗口不會打開。

+0

關閉窗口後出現錯誤:'can not invoke'wm「command:application has been destroyed'。有沒有辦法解決這個問題? –

+0

我的不好:我把主循環放在第一位。但現在我有另一個問題。當我點擊十字架關閉窗口時,聲音停止。但窗戶保持打開狀態。當我在'root.protocol'內添加'root.destroy'時,出現了一個ERROR'wm_protocol()需要從1到3個位置參數,但是有4個被賦予了'。 –

+0

如果您在單擊關閉框時需要執行多個操作,則需要編寫一個函數來完成所有操作(lambda不再足夠),並將其傳遞給''wm_protocol''。 – jasonharper