2017-02-26 5 views
0

ユーザーは問題を解決する時間が限られています。プログラムでは、GUI(tkinter)タイマーと同時に音楽ファイルを実行し、両方の時間が終わると終了します。一部のユーザーはEARLYを終了することがあります。私は彼らがタイマーウィンドウを閉じるときに音楽を止めさせたい。 '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) 

は、実際にテストしていませんが、サウンド再生を停止するのに適した機能です。

元のPlaySoundコールのフラグにwinsound.SND_ASYNCを追加する必要があると思われます。そうしないと、サウンドが終了するまでウィンドウが開かれません。

+0

ウィンドウを閉じると、 'wm "コマンドを呼び出すことはできません:アプリケーションは破棄されました。その周りに道がありますか? –

+0

私の悪い:私はメインループを最初に入れます。しかし、今私は別の問題があります。十字をクリックして窓を閉じると、音が止まります。しかし、ウィンドウは開いたままです。 'root.protocol'の中に 'root.destroy'を追加すると、 'wm_protocol()に1から3の位置引数がありますが、4が与えられました'というエラーがありました。 –

+0

クローズボックスがクリックされたときに複数のことを行う必要がある場合は、それらをすべて実行する関数を書く必要があります(ラムダはもはや実際には十分ではありません)。それを '' wm_protocol''に渡します。 – jasonharper

関連する問題