2008-10-16 3 views
0

사용자가 커서 위젯의 포커스를 항목 위젯에서 다른 곳으로 변경하면 이벤트를 생성 할 수있는 코드를 작성합니다. ... 예를 들어, 다른 엔트리 위젯, 버튼 ...파이썬 + Tkinter에서 커서 이벤트 처리에 대한 도움이 필요합니다.

지금까지 나는 TAB과 마우스 클릭에 바인딩하는 아이디어가있었습니다.하지만 마우스를 클릭하면 항목 위젯에 클릭하면 내부에서만 마우스 이벤트가 발생합니다 엔트리 위젯.

위젯이 커서 포커스를 잃을 때 이벤트를 생성하려면 어떻게해야합니까?

도움이 될 것입니다.

미리 감사드립니다.

윌리엄.

답변

0

이것은 Tkinter를 특정하지 않고,이를 기반으로 포커스 아니에요,하지만 난 여기에 비슷한 질문에 대답을 얻었다 :

Detecting Mouse clicks in windows using python

내가 꽤의 모든 Tkinter를하지 않았다면, 그러나 "FocusIn"및 "FocusOut"이벤트가있는 것으로 보입니다. 문제를 해결하기 위해 바인딩하고 추적 할 수 있습니다. 에서

: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

4

이벤트 <하는 focusIn > 및 < 대한 focusOut > 당신이 원하는 무엇인가. 다음 예제를 실행하면 항목 위젯 중 하나에 포커스가있을 때 클릭하거나 탭 (또는 Shift-Tab)을 눌러 포커스를 가져오고 나가는 것을 볼 수 있습니다.

from Tkinter import * 

def main(): 
    global text 

    root=Tk() 

    l1=Label(root,text="Field 1:") 
    l2=Label(root,text="Field 2:") 
    t1=Text(root,height=4,width=40) 
    e1=Entry(root) 
    e2=Entry(root) 
    l1.grid(row=0,column=0,sticky="e") 
    e1.grid(row=0,column=1,sticky="ew") 
    l2.grid(row=1,column=0,sticky="e") 
    e2.grid(row=1,column=1,sticky="ew") 
    t1.grid(row=2,column=0,columnspan=2,sticky="nw") 

    root.grid_columnconfigure(1,weight=1) 
    root.grid_rowconfigure(2,weight=1) 

    root.bind_class("Entry","<FocusOut>",focusOutHandler) 
    root.bind_class("Entry","<FocusIn>",focusInHandler) 

    text = t1 
    root.mainloop() 

def focusInHandler(event): 
    text.insert("end","FocusIn %s\n" % event.widget) 
    text.see("end") 

def focusOutHandler(event): 
    text.insert("end","FocusOut %s\n" % event.widget) 
    text.see("end") 


if __name__ == "__main__": 
    main(); 
관련 문제