Python:如何从列表框中获取多个条目?

时间:2013-07-25 22:25:49

标签: python user-interface listbox tkinter selection

我想在目录中获取所有文件名并在列表框中将其显示给用户,然后用户可以选择多个名称并按“确定”或“取消”。如果他按OK,它应该返回选定的文件名。请帮忙。

2 个答案:

答案 0 :(得分:2)

这是使用Tkinter的一种相当简单的方式:

from Tkinter import *


root = Tk()
opt_list = ['opt1','opt2','opt3','opt4','opt5']
sel_list = []

def get_sel():
    sel_list.append(Lb1.curselection())
    root.destroy()

def cancel():
    root.destroy()

B = Button(root, text ="Submit", command = get_sel)
C = Button(root, text ="Cancel", command = cancel)
Lb1 = Listbox(root, selectmode=MULTIPLE)

for i,j in enumerate(opt_list):
    Lb1.insert(i,j)


Lb1.pack()
B.pack()
C.pack()

root.mainloop()

for i in sel_list[0]:
    print opt_list[int(i)]

然后你可以这个来获得所选的选项:

for i in sel_list[0]:
    print opt_list[int(i)]

这将使用sel_list中的项目创建一个列表框,然后当用户按下提交时,它将返回一个选择了哪些行的元组

可以一次选择多个,并在元组中返回,从此网站获取更多信息Python Tk Tutorials Point

答案 1 :(得分:0)

更具体地说,您想要的是http://tkinter.unpythonic.net/wiki/tkFileDialog

#python 3
from tkinter.filedialog import askopenfilename
filenames = askopenfilename(multiple=True)

这将返回该人选择的文件的路径列表,以提取文件名:

import os
filenames = [os.path.basename(filename) for filename in filenames]

如果你想要没有扩展名的文件名,而不是上面的行使用:

filenames = [os.path.splitext(os.path.basename(filename))[0] for filename in filenames]