은 자신의 루프를 계속하기 전에 파괴하는 매개 변수로 전달 된 창을 기다립니다 이 메소드를 호출 객체 ... Misc
클래스의 문서화 문자열에서"wait_window"메소드는 어떤 기능을합니까?
, 우리가 관찰 할 수있는 것 같습니다 :
언뜻
, 그것은def wait_window(self, window=None): """Wait until a WIDGET is destroyed. If no parameter is given self is used."""
Toplevel
모달을 할 수있는이 방법처럼 보인다, 그러나 이것은 사실이 아니다.Toplevel
모달로 만들려면grab_set()
메서드를 사용해야합니다.나는 다른 설명 주위에 볼 수있다 :
:
wait_window
매개 변수 가 파괴되지 않기 때문에 전달 된 주어진 위젯까지 반환하지 보인다. 다른 곳에서
wait_window(widget)
은 - 지정된 위젯이 파괴 될 때까지 기다립니다 로컬 이벤트를 작성합니다. 이 루프는 응용 프로그램의 메인 루프에 영향을주지 않습니다. effbot 문서에서, 우리는이 :
가
wait_window
로컬 이벤트 루프를 입력 해, 지정된 윈도우가 파괴 될 때까지 (반환하지 않습니다 중 하나를 파괴하는 방법으로 또는 명시 적으로 를 통해) 윈도우 매니저를 통해 :widget.wait_window(window)
무엇 정확히 수단
window
(자체)window
을 기다리는 중입니까?
wait_window
에 대한 호출 이후에 오는 코드는 동일한 메서드에 전달 된 창이 소멸되지 않는 한 실행되지 않습니다.from tkinter import * def on_win_request(parent): dialog = Toplevel() parent.wait_window(dialog) # executed only when "dialog" is destroyed print("Mini-event loop finished!") r = Tk() b = Button(r, text='New Window', command=lambda: on_win_request(r)) b.pack() b2 = Button(r, text='Hello!', command=lambda: print("hello")) b2.pack() r.mainloop()
"Mini-event loop finished!"
이dialog
라는 지역Toplevel
위젯이 파괴 된 경우에만 인쇄 할 다음 작업의 예에서 , 우리는 단지 말의 증거를 볼 수 있습니다.그럼 실제 상황에서 정확히이 방법을 사용해야합니까?
나는 대화 창을 지울 때까지 생성자에서 응용 프로그램을 차단하는 것 같습니다. 사용자가 대화와 상호 작용할 때까지 차단하기 만하면되므로 부모를 기다리고 싶지 않을 것입니다. 내가 GUI 프로그래밍을 해본 적이 없어서 GUI 스레드를 다루는 주 스레드가 어떻게되어 있는지 확실하지 않기 때문에 적절한 답변을 제공하지 못했습니다. – Jmac
@Jmac 왜 부모님을 기다리고 싶지 않습니까? 부모님은 제가 이해하는 한 대화를 기다립니다. 근본적으로 일어날 일은 부모가 대기하는 창은 자체 로컬 루프에 들어간다는 것입니다. – nbro
@Jmac'effbot'에 명시되어있는 한,'wait_window'는 로컬 이벤트 루프에 들어가고, 파라미터로서 주어진 윈도우가 파괴 될 때까지 리턴하지 않습니다. 그래서 우리가 부모에서'wait_window'를 호출 할 경우, 우리는 로컬 루프 (대화 상자에서 가정 한 것인가, 아니겠습니까?)에 들어갈 것입니다. 대화 상자가 소멸 될 때까지 부모에게 제어권을 반환하지 않을 것입니다. – nbro