2008-10-16 6 views
0

Je construis un code dans lequel j'aimerais générer un événement lorsque l'utilisateur change le focus du curseur d'un widget d'entrée à n'importe où, par exemple un autre widget d'entrée, un bouton ...J'ai besoin d'aide avec le traitement des événements de curseur en python + Tkinter

Jusqu'à présent, je suis seulement sorti avec l'idée de lier à TAB et le clic de la souris, bien que si je lie la souris au widget Entrée je reçois seulement des événements de souris à l'intérieur le widget Entrée.

Comment puis-je accomplir pour générer des événements lorsqu'un widget perd le focus du curseur?

Toute aide sera grandement appréciée!

Merci d'avance!

William.

Répondre

4

Les événements <FocusIn> et <FocusOut> sont ce que vous voulez. Exécutez l'exemple suivant et vous verrez que vous obtenez des liaisons internes et externes de mise au point, que vous cliquiez ou que vous appuyiez sur la touche Tab (ou Majuscule) lorsque le focus est dans l'un des widgets d'entrée.

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(); 
Questions connexes