2017-02-26 5 views
0

사용자는 제한된 시간 동안 문제를 해결할 수 있습니다. 프로그램에서 GUI (tkinter) 타이머와 동시에 음악 파일을 실행하고 시간이 다되면 둘 다 끝냅니다. 일부 사용자는 초기에 완료 할 수 있습니다. 나는 그들이 타이머 창을 닫을 때 음악을 멈추게하고 싶다. 'winsound'는 'stop()'을 허용하지 않으며 'winsound.SND_PURGE'는 성공하지 못했습니다. 이것은 내가 생각했던 것보다 더 복잡합니다. 나는 이것을 시도했다 :음악 파일을 HALT (파이썬 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()에 무엇을 할 것이라고 기대 했습니까? 창을 닫을 때 호출 할 함수를 전달해야합니다. 그것은 다음과 같이 보입니다 :

은 실제로 테스트하지는 않았지만 사운드 재생을 정지시키는 데 적합한 기능입니다.

원본 PlaySound 호출의 플래그에 winsound.SND_ASYNC을 추가해야 할 필요가 있거나 사운드가 끝날 때까지 창이 열리지 않을 것입니다.

+0

일단 창을 닫으면 오류가 발생합니다. 'wm "명령을 호출 할 수 없습니다 : 애플리케이션이 파괴되었습니다.' 그 주위에 방법이 있습니까? –

+0

불량 : 메인 루프를 먼저 끼 웁니다. 하지만 지금은 또 다른 문제가 있습니다. 십자가를 클릭하여 창을 닫으면 소리가 멈 춥니 다. 그러나 창문은 열려 있습니다. 'root.protocol'안에 'root.destroy'를 추가하면 'wm_protocol()에 1에서 3까지의 인수가 있지만 4가 주어진다'라는 오류가 있습니다. –

+0

닫기 상자를 클릭 할 때 둘 이상의 작업을 수행해야하는 경우, 모든 작업을 수행하는 함수를 작성해야합니다 (람다는 더 이상 충분하지 않습니다). 그리고이를 "wm_protocol"으로 전달해야합니다. – jasonharper