在Tkinter中选择列表框中的选定行
你好,我有一个关于Python Tkinter中Listbox的问题。当我选择一个值时,我需要在代码中添加什么才能让Listbox返回这个值?我不需要选择多个值。另外,我可以添加一个按钮来执行一个命令,同时把从Listbox返回的值放入这个命令中吗?我使用的是Python 2.7,lis是我的数组名称。谢谢你的关注和帮助!
master = Tk()
listbox = Listbox(master)
listbox.pack()
listbox.insert(END, "Please select:")
for p in lis:
listbox.insert(END, p)
master.mainloop()
1 个回答
2
比如,你可以添加一个按钮来检查选择的内容。
from Tkinter import *
def check_list():
try:
s = lb.selection_get()
print 'selected:', s
except:
print 'no selection'
master = Tk()
lb = Listbox(master)
lb.pack()
lb.insert(END, "Please select:")
for p in range(10):
lb.insert(END, p)
but = Button(master, text="Check", command=check_list)
but.pack()
master.mainloop()
如果你在 command
中需要一些参数,可以使用 lambda
。
command=lambda:my_function(argument)
顺便提一下:在使用 for
循环时,要注意 command=
中的参数。
这会把值 10
放到所有的 my_function(i)
中的 i
位置。
for i in range(10):
... command=lambda:my_function(i)
这样做是符合预期的。
for i in range(10):
... command=lambda x=i:my_function(x)
编辑:
lb.selection_get()
可以从列表框中获取文本(如果你选择了多个元素,用 \n
来分隔它们),如果没有选择则会报错。
lb.curselection()
会返回一个索引列表,如果没有选择则返回一个空列表。
def check_list_2():
s = lb.curselection()
if not s:
print 'no selection'
else:
for x in s:
print 'selected index:', x
print 'selected text:', lb.get(x)