2012-07-28 3 views
1

별도의 스레드에서 실행되는 tkinter 창에 대한 가상 이벤트를 생성해야합니다. non-gui 쓰레드에서 event_generate을 호출하는 것은 안전 할 것으로 간주되며 tkinter가 주 쓰레드에서 실행되고 이벤트가 다른 쓰레드에서 생성 될 때 잘 동작합니다.새로운 스레드에서 tkinter가 실행될 때`event_generate` 사용

어떤 이유로 저는 이벤트를 생성하는 문장이 주 스레드에서 실행되어야합니다. (구체적으로 말하면 모듈의 최상위 레벨에 있어야합니다.)

그러나 새 스레드에서 root = Tk(); root.mainloop()을 수행하고 주 스레드에서 root.event_generate("<<my-event>>")을 수행하면 스택 오버플로가 발생합니다. 스레드 (주 스레드의 root = Tk(); root.mainloop() 및 새 스레드의 root.event_generate("<<my-event>>"))를 바꿔 넣으면 모든 것이 다시 작동합니다.

이벤트를 생성하기 전에 루트가 완전히 구성되어 있는지 (유휴 상태인지)주의를 기울였습니다.

이 설정을 사용하는 방법에 대한 아이디어가 있으십니까? 메인 스레드에서 root = Tk()을 유지 만 root.mainloop() 보조 스레드에 넣어 :

답변

1

대답 자신을 발견 (I 파이썬 3.2.3 사용하고 있습니다)

.

+0

젠장, 리눅스와 OS X에서는 tkinter가 메인 스레드에서만 실행되어야한다 : http://stackoverflow.com/a/1835036/261181 – Aivar

관련 문제