2010-04-18 5 views
4

Comme le titre l'indique, j'attrape l'emplacement du curseur dans un gestionnaire d'événement déclenché par un mouvement dans Tkinter.Comment accéder à un objet externe dans le gestionnaire d'événements?

Je souhaite mettre à jour un widget étiquette existante avec l'emplacement. Cependant, je ne peux pas pour la vie de moi comprendre comment modifier le champ de texte Label (ou n'importe quel objet externe d'ailleurs) dans le gestionnaire d'événements. D'après ce que je comprends, l'événement est le seul argument passé au gestionnaire, ce qui signifie que je ne peux pas passer l'objet label.

Comment accéder aux objets en dehors du gestionnaire?

Répondre

3

Tkinter ne passera pas les objets dans le gestionnaire d'événements, et de toute façon comment il sait dans quel objet vous vous intéressez? Au lieu de cela, il est de votre responsabilité d'accéder aux objets que vous souhaitez mettre à jour à partir du gestionnaire d'événement, par ex. votre gestionnaire d'événements peut être une fonction simple et il peut accéder à un objet global, ou il peut être une méthode d'un objet et peut accéder à cet objet via self.

est ici un moyen utilisant des objets globaux

from Tkinter import * 

root = Tk() 
frame = Frame(root) 
frame.configure(width=300,height=300) 

def onmotion(event): 
    root.title("Mouse at %s,%s"%(event.x, event.y)) 

frame.bind("<Motion>", onmotion) 
frame.pack() 
root.title("Event test") 
root.mainloop() 

Même chose peut être fait dans un objet orienté manière

from Tkinter import * 

class MyFrame(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 
     self.parent = root 
     self.configure(width=300,height=300) 
     self.pack() 
     self.bind("<Motion>", self.onmotion) 

    def onmotion(self, event): 
     self.parent.title("Mouse at %s,%s"%(event.x, event.y)) 

root = Tk() 
frame = MyFrame(root) 
root.title("Event test") 
root.mainloop() 
Questions connexes