2013-04-11 2 views
3

현재 win32gui python27 응용 프로그램을 작성 중입니다 (win7을 실행 중입니다). mainloop()에서 새로운 창을 생성하고 메인 루프를 멈추고 루트 창을 비활성화하여 포커스를 유지하는 것이 가능한지 궁금합니다. 의사 코드 예제의 종류에 :
가 아니라 콘솔 초점 (기본 창에서 초점을 훔치는 : 기본적으로Tkinter의 새로운 Toplevel() 창에 창 초점을 유지하는 방법은 무엇입니까?

root=Tk() 
#put in some widgets, such as statusbars, tkfileDialog widgets etc... 
O=Toplevel() 
OptionMenu(O) #wait for user to make his choices; btw: OptionMenu is a class... 
tkFileDialog.askdirectory(...) #THEN interpret this line 

, 나는 tkfiledialog과 tksimpledialog에서 위젯의 대부분은 무엇을 달성하고 싶습니다 , wm focus) 그리고 예를 들어 OptionMenu가 해결 된 후에 메인 루프를 다시 시작합니다. 나는 내 목표를 분명히 할 수 있었으면 좋겠다. 나는 Tkinter 프로그래밍을 몇 주 전에 시작했기 때문에, 뒤에서 몇 가지 개념을 혼동하고 잘못 해석 할 수있다 ....
그게 다야!

답변

8

찾고있는 개념을 "잡아"라고합니다. Tkinter는 여러 가지 방법으로 그랩을 지원합니다. 예를 들어 최상위에 로컬 잡기를 설정하려면 my_window.grab_set()을 사용합니다. 로컬 잡는 곳은이 창에서 앱의 다른 모든 창에서 포커스를 가져 오는 곳이지만 앱에만 해당합니다.

특정 창을 제외하고 전체 디스플레이를 효과적으로 정지시키는 글로벌 잡기를 수행 할 수도 있습니다. 이것은 코드에 버그가있는 경우 자신의 컴퓨터에서 쉽게 자물쇠를 열 수 있기 때문에 매우 위험합니다.

그래브는 이 아닙니다.은 메인 루프 기능을 비활성화합니다. 창을 통해 이벤트를 처리해야합니다. 모든 이벤트를 잡아주는 창으로 간단히 리디렉션합니다.

은 자세한 내용은 grab_set에 대해 읽어 및 기타 잡아 여기 명령 : 위의 제안 http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.grab_set-method

0

없음 맥 OS 엘 캐피 탄에, 나를 위해 일하지 않는다. 그러나 이러한 힌트를 기반으로하면 다음과 같습니다.

class Window(Tk.Toplevel): 
    ... 
    def setActive(self): 
     self.lift() 
     self.focus_force() 
     self.grab_set() 
     self.grab_release() 
    ... 
관련 문제