在Tkinter中选择列表框中的选定行

1 投票
1 回答
2430 浏览
提问于 2025-04-18 14:38

你好,我有一个关于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)

撰写回答