2010-05-07 4 views
21

Wenn ich eine Arbeitsfläche verwende, um Daten anzuzeigen, und ich möchte, dass der Benutzer auf verschiedene Elemente auf der Arbeitsfläche klicken kann, um mehr Informationen zu erhalten oder auf irgendeine Weise damit zu interagieren, was ist der beste Weg dazu ?Wie füge ich Ereignisbindungen mit Tkinter an Elemente auf einer Arbeitsfläche an?

Online suchen Ich kann Informationen darüber finden, wie Ereignisse an Tags gebunden werden, aber das scheint indirekter zu sein als das, was ich möchte. Ich möchte Elemente nicht mit Tags gruppieren, sondern bestimmte Funktionsaufrufe ausführen, wenn der Benutzer auf bestimmte Elemente im Erstellungsbereich klickt.

Antwort

50

Um mit Objekten, die in einem Canvas-Objekt Sie verwenden tag_bind() müssen in Wechselwirkung treten, die dieses Format hat: kann tag_bind(item, event=None, callback, add=None)

Der Artikel Parameter entweder ein Tag oder eine ID. Hier

ist ein Beispiel, das Konzept zu veranschaulichen:

from tkinter import * 

def onObjectClick(event):     
    print('Got object click', event.x, event.y) 
    print(event.widget.find_closest(event.x, event.y)) 

root = Tk() 
canv = Canvas(root, width=100, height=100) 
obj1Id = canv.create_line(0, 30, 100, 30, width=5, tags="obj1Tag") 
obj2Id = canv.create_text(50, 70, text='Click', tags='obj2Tag') 

canv.tag_bind(obj1Id, '<ButtonPress-1>', onObjectClick)  
canv.tag_bind('obj2Tag', '<ButtonPress-1>', onObjectClick) 
print('obj1Id: ', obj1Id) 
print('obj2Id: ', obj2Id) 
canv.pack() 
root.mainloop() 
+7

Nizza Beispiel. Ich mag, wie Sie die Verwendung von einem ID und einem Tag zeigen, und verwenden Sie Namen wie "obj1Id" und "obj1Tag", um den Punkt nach Hause zu fahren. –