2010-05-07 8 views
21

Se sto usando una tela per visualizzare i dati e voglio che l'utente sia in grado di fare clic su vari elementi sulla tela per ottenere più informazioni o interagire con essa in qualche modo, qual è il modo migliore di fare questo ?Come si collegano i binding di eventi agli elementi su una tela utilizzando Tkinter?

Ricerca in linea Sono in grado di trovare informazioni su come associare gli eventi ai tag, ma ciò sembra essere più indiretto di ciò che voglio. Non desidero raggruppare elementi con tag, ma piuttosto avere chiamate di funzioni specifiche quando l'utente fa clic sugli elementi specifici nell'area di disegno.

risposta

50

Per interagire con gli oggetti contenuti in un oggetto Canvas è necessario utilizzare tag_bind() che ha il seguente formato: tag_bind(item, event=None, callback, add=None)

Il parametro elemento può essere un tag o un id.

Ecco un esempio per illustrare il concetto:

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

Bell'esempio. Mi piace come mostri l'uso sia di un id che di un tag, e usi nomi come 'obj1Id' e' obj1Tag' per guidare il punto a casa. –

Problemi correlati