【问题标题】:Python: How to get multiple entries from listbox? [closed]Python:如何从列表框中获取多个条目? [关闭]
【发布时间】:2024-04-23 03:45:02
【问题描述】:

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

【问题讨论】:

  • 我不同意这个问题被搁置为题外话。这个问题已经成为一个关于 tkinter 列表框小部件的很好的教程,它可能会帮助许多新手 python 程序员。
  • @Bryan 阅读下面“离题”的描述。
  • 您是专门询问在列表框中显示名称,还是标准文件对话框有效?两者都有可能,只是不清楚你真正需要什么。

标签: python user-interface listbox tkinter selection


【解决方案1】:

这是一个使用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

【讨论】:

  • 当我按下“提交”按钮时,窗口没有关闭。
  • 你只需要打电话给root.destroy()检查我的编辑我做了一些更改现在它将选定的选项添加到sel_list并且当你推送提交时它会关闭
  • 我如何将选定的值放入列表中?
  • 查看新的编辑,只需使用第二个 for 循环,它将打印选定的选项 :)
  • 以及如何添加一个“取消”按钮来退出gui窗口? :)
【解决方案2】:

更具体地说,你想要的是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]

【讨论】: