Il existe plusieurs façons d'obtenir des rappels lorsque les widgets Text
ou Entry
sont modifiés dans Tkinter, mais je n'en ai pas trouvé un pour les Listbox
(cela n'aide pas une grande partie de la documentation sur l'événement que je peux trouver est ancienne ou incomplète). Existe-t-il un moyen de générer un événement pour cela?
Vous pouvez vous lier à:
<<ListboxSelect>>
def onselect(evt):
# Note here that Tkinter passes an event object to onselect()
w = evt.widget
index = int(w.curselection()[0])
value = w.get(index)
print 'You selected item %d: "%s"' % (index, value)
lb = Listbox(frame, name='lb')
lb.bind('<<ListboxSelect>>', onselect)
J'ai eu le problème dont j'avais besoin pour obtenir le dernier élément sélectionné dans une zone de liste avec selectmode = MULTIPLE. Au cas où quelqu'un d'autre aurait le même problème, voici ce que j'ai fait:
lastselectionList = []
def onselect(evt):
# Note here that Tkinter passes an event object to onselect()
global lastselectionList
w = evt.widget
if lastselectionList: #if not empty
#compare last selectionlist with new list and extract the difference
changedSelection = set(lastselectionList).symmetric_difference(set(w.curselection()))
lastselectionList = w.curselection()
else:
#if empty, assign current selection
lastselectionList = w.curselection()
changedSelection = w.curselection()
#changedSelection should always be a set with only one entry, therefore we can convert it to a lst and extract first entry
index = int(list(changedSelection)[0])
value = w.get(index)
tkinter.messagebox.showinfo("You selected ", value)
listbox = tk.Listbox(frame,selectmode=tk.MULTIPLE)
listbox.bind('<<ListboxSelect>>', onselect)
listbox.pack()