Tkinter Listbox - PullRequest
       17

Tkinter Listbox

4 голосов
/ 27 декабря 2011

Я хочу выполнить функцию одним щелчком мыши по списку. Это моя идея:

from Tkinter import *
import Tkinter

def immediately():
    print Lb1.curselection()

top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")

Lb1.pack()


Lb1.bind('<Button-1>', lambda event :immediately() )
top.mainloop()

Но эта функция печатает перед выполнением выбора ... Когда вы запустите этот код, вы увидите, в чем заключается проблема.

1 Ответ

8 голосов
/ 27 декабря 2011

Вы можете привязаться к событию <<ListboxSelect>>, как описано в этом сообщении: Получение обратного вызова при изменении выбора списка Tkinter? TKinter несколько странно в том смысле, что информация, по-видимому, не содержится в событии, которое отправляется обработчику. Также обратите внимание, что нет необходимости создавать лямбду, которая просто вызывает вашу функцию immediately, объект функции может быть передан как показано:

from Tkinter import *
import Tkinter

def immediately(e):
    print Lb1.curselection()


top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")

Lb1.pack()


Lb1.bind('<<ListboxSelect>>', immediately)
top.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...