2013-06-30 2 views
1

메인 윈도우와 루프의 특정 조건을 검사하는 백그라운드 스레드로 애플리케이션을 빌드하려고하는데, 조건이 충족되면 메인 윈도우가 정면. 창을 앞에 가져 오려면 lift() 메서드를 사용하지만 작동하지 않습니다.python의 Tkinter 패키지의 lift() 메소드가 작동하지 않습니다.

from Tkinter import * 
root = Tk() 

TK 식 창이 나타납니다 은 그래서 파이썬 명령 줄에서 다음과 같은 실험을했다. 창을 최소화하고 다음을 수행하십시오.

root.lift() 

아무런 반응이 없습니다. 나는 또한 들어 올리기 전에 창 메인 루프를 시작하려고 시도했다 :

import thread 
# start mainloop in separate thread so we can continue typing 
thread.start_new_thread(root.mainloop,()) 
root.lift() 

다시는 아무 일도 일어나지 않는다. 실제 코드에서는 더 악화됩니다. lift()을 호출하면 창이 멈추고 응답하지 않습니다.

내가 뭘 잘못하고 있니?

답변

1

당신은 당신이 위젯을 만드는 것과 다른 스레드에서 주회 돌이를 실행할 수 없습니다 (I는 윈도우 7에 파이썬 2.7.2를 사용하고 있습니다). 실제로 다른 스레드에서 위젯과 전혀 상호 작용할 수 없습니다.

창 최소화의 효과를 되돌리려면 deiconify 메서드를 사용해야합니다.

+0

확인. 나는 위의 실험에서 deiconify를 시도하고 작동합니다. 감사. 이제 스레드를 사용하여 창을 업데이트하는 방법은 무엇입니까? 메시지 전송 메커니즘이 있습니까? – roel

+1

대기열을 사용해야합니다. stackoverflow에 대한 몇 가지 예가 있습니다. 예 : http://stackoverflow.com/a/1198288/7432 –

+0

팁 주셔서 감사합니다. 링크의 예제에서'after' 메서드를 사용하여 내 문제를 해결했습니다. – roel

관련 문제