使用PySimpleGui加载多个文件

5

在PySimpleGUI中,是否可以使用一行代码选择多个文件路径?

sg.PopupGetFile('Unique File select')

只能选择一个文件

docs PopupGetFile(message, 要在窗口中显示的消息
default_path='', 浏览应从哪个路径开始
default_extension='', 默认是哪种文件类型
save_as=False, 确定要显示哪种对话框样式
file_types=(("所有文件", "."),), 要显示哪些文件类型
no_window=False, 如果为True,则除了对话框之外不显示窗口
size=(None,None), 窗口大小
button_color=None, 按钮颜色
background_color=None, 窗口背景颜色
text_color=None, 窗口中文本的颜色
icon=DEFAULT_WINDOW_ICON, 在任务栏上显示的图标
font=None, 使用的字体
no_titlebar=False, 如果为True,则不显示标题栏
grab_anywhere=False, 如果为True,则可以在任何地方抓取窗口以移动它
keep_on_top=False, 如果为True,则窗口将位于其他窗口之上
location=(None,None)) 在屏幕上显示窗口的位置

有没有适用于多个文件而无需循环模式的API?


当您选择多个文件时,PopupGetFile() 返回什么? - quamrana
sg.PopupGetFile('blabla') => 'C:\test.txt' => sg.PopupGetFile('blabla')=> 'C:\ test.txt' - Sylvain Page
我的猜测是,由于它基于Tkinter,多个文件不是一个问题。 - quamrana
在Tkinter中是有的,所以我想直接使用它,但是对于简单的事情,PySimpleGUI更加适合:files = filedialog.askopenfilenames(parent=root, initialdir="/", title='请选取文件')。 - Sylvain Page
1个回答

7
这里有一个像您所寻找的“一行”解决方案...
它允许您从对话框中选择多个文件并将文件列表打印为列表。为了安全起见,您应该检查event的值,以确保单击了OK按钮。
import PySimpleGUI as sg

event, values = sg.Window('Window Title').Layout([[sg.Input(key='_FILES_'), sg.FilesBrowse()], [sg.OK(), sg.Cancel()]]).Read()

print(values['_FILES_'].split(';'))

[2022年5月编辑]

好的,我们又回到了SO,面对一个耳熟能详的问题:这里没有什么东西会消失... 所有的东西都将永远存在下去,包括旧问题与旧解决方案,它们不再是“问题”。

虽然这是一个有趣的解决方案,但它是在2019年4月提出的,距离PySimpleGUI的初始发布只有9个月。 这个答案古老了,它能用,但它教授了错误的惯例和方法。

这个讨论使用了非PEP8的popup调用,它使用了不应该使用的window.Layout方法,而且PySimpleGUI项目现在推荐的键命名惯例已经不匹配了。

当我命名原始popup调用时,我并不知道PEP8的存在,一旦我弄清楚了这个相当严重的错误,就花费了一些时间为所有这些函数创建遵循PEP8惯例的别名。

PySimpleGUI的文档和演示程序得到了更新...这些StackOverflow上的答案没有。 很难找到所有发布答案的网站并进行修复,但是Github上的文档和示例程序是可以维护的...并且它们会被维护。

使用PySimpleGUI的一个问题是强烈希望向后兼容,因此它不禁止使用不再推荐的调用。

新答案

在Github上求助

如果我现在(2022年)回答这个问题,我会首先说请通过GitHub的Issue请求。不仅对于这个项目,而且对于所有项目,去到项目的主页并问开发人员。在寻找答案时,请去那里找答案。您可能会在这里找到答案,但可能要付出代价。从项目文档开始,然后向外扩展。

“Google它”不是编程的最佳方法。 它会引导你到旧的、可能是错误的信息。他们的算法很愚蠢,但读者不是

弹窗

popup_get_file是popup调用的PEP8兼容名称,应该使用它。现在它有一个名为multiple_files的参数,当设置为True时,允许用户选择多个文件。请查看主文档中的调用参考选项卡以获取详细信息- http://www.PySimpleGUI.org

你会发现该参数的描述是:

如果为True,则允许选择多个文件,并在每个文件名之间返回“;”

最终答案...

files = sg.popup_get_file('Unique File select', multiple_files=True)

这是如何通过弹出调用获取多个文件的操作方式。

谢谢关注

这是一个非常广泛的重要话题,需要进行冗长的编辑。我明白想要通过谷歌精灵快速获取答案的心情,但快速的答案并不能构建稳定的产品或者优秀的产品。


就是这样,谢谢!我没有注意到我可以使用FilesBrowse()而不是FileBrowse。 - Sylvain Page
1
一个优美的答案。正是我所需要的。 - jkix
哦哦哦哦哦哦哦..... 在评论中说“优雅”,这引起了我的注意!非常感谢!我很感激,你让我再次意识到需要更新答案。 - Mike from PSG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接