2017-08-17 1 views
1

Il existe deux méthodes dans le code ci-dessous, l'une pour la capture des clics de souris et l'autre pour la touche. Je veux mettre en focus_set sur la touche plutôt que sur les clics de la souris mais si j'utilise focus_set dans la fonction de la touche, alors ça ne marche pas. mais si je le mets à l'intérieur de la souris, cliquez dessus, cela fonctionne et les fonctions clés fonctionnent très bien.python Tkinter focus_set() ne fonctionne pas correctement lors de la capture de l'événement de touche

from tkinter import * 
root = Tk() 

text = '' 
frame = Frame(root, width=100, height=100) 


def key(event): 

    frame.focus_set() # here is the focus set which is not working 
    global text 

    text += event.char 
    print (test) 

def callback(event): 
    #but If I put that same line here, it works 
    print ("clicked at", event.x, event.y) 

frame.bind("<Key>", key) 
frame.bind("<Button-1>", callback) 
frame.pack() 

root.mainloop() 

Répondre

1

focus_set affecte uniquement les événements que le feu après avoir été appelé, et il ne touche que les événements de clavier, pas de clics de souris. L'appeler dans un gestionnaire d'événements ne peut simplement pas affecter l'événement traité.

+0

merci pour la réponse, aussi je veux savoir, si je retourne la valeur de texte à partir de la méthode de clé, puis faire une nouvelle variable en dehors de la méthode comme une clé = (quel sera le paramètre? prend l'objet événement comme paramètre. ce qui devrait être dans le paramètre de cette méthode clé –

+0

@ MD.FazlaRabby: Puisque 'key' utilise les données de l'événement, si vous voulez l'appeler directement et enregistrer la valeur de retour, vous allez devoir lui passer un objet qui a un paramètre 'char' puisque c'est ce que votre callback nécessite. –

+0

merci pour votre réponse, python a-t-il une variable "char"? Ce serait vraiment utile si vous pouviez me donner une démonstration/exemple –