Tkinter 列表框

5 投票
1 回答
17710 浏览
提问于 2025-04-17 09:05

我想在列表框上点击一下就执行一个函数。这是我的想法:

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 个回答

9

你可以绑定到 <<ListboxSelect>> 事件,具体方法可以参考这篇文章:当Tkinter的Listbox选择发生变化时获取回调。 TKinter有点奇怪,因为发送给处理程序的事件里似乎没有包含相关的信息。另外,注意不需要创建一个简单的lambda表达式来直接调用你的函数,实际上可以直接传递函数对象,如下所示:

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()

撰写回答