Получение обратного вызова при изменении выбора списка Tkinter? - PullRequest
40 голосов
/ 02 июля 2011

Есть несколько способов получить обратные вызовы, когда виджеты Text или Entry изменены в Tkinter, но я не нашел один для Listbox (это не сильно помогает событиюдокументация, которую я могу найти, старая или неполная).Есть ли способ генерировать событие для этого?

Ответы [ 3 ]

59 голосов
/ 17 октября 2012
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)
44 голосов
/ 02 июля 2011

Вы можете привязать к:

<<ListboxSelect>>
2 голосов
/ 20 декабря 2017

У меня была проблема с тем, что мне нужно было получить последний выбранный элемент в списке с помощью selectmode = MULTIPLE.Если у кого-то есть такая же проблема, вот что я сделал:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...