如何解决使用PysimpleGUI FileBrowse函数时如何显示文件夹中的文件?
首先,PySimpleGUI很棒!但是,在使用folderbrowse()时,我无法弄清楚如何显示文件夹中的所有文件?
或者,是否可以在发件箱中打印所选文件名?请给我一些指导。
解决方法
FileBrowse()
和FolderBrowse()
是不同的小部件。
FolderBrowse()
仅用于选择文件夹,因此不显示文件。
FileBrowse()
用于选择文件,以便显示文件和文件夹(但您无法选择文件夹来获取它)。
FileBrowse()
提供了所选文件夹的完整路径,以后您应该使用
-
os.listdir(folder)
获取所选文件夹中所有文件和文件夹的名称(但子文件夹中没有名称) -
os.walk(folder)
获取该文件夹和子文件夹中的所有文件和文件夹。 -
glob.glob(pattern)
仅获得一些名称-即。glob.glob(f"{folder}/*.png")
获取名称时,您可以在控制台中打印或更新小部件中的文本。
此最小示例在单击Submit
import PySimpleGUI as sg
import os
#help(sg.FolderBrowse)
#help(sg.FileBrowse)
layout = [
[sg.Input(),sg.FileBrowse('FileBrowse')],[sg.Input(),sg.FolderBrowse('FolderBrowse')],[sg.Submit(),sg.Cancel()],]
window = sg.Window('Test',layout)
while True:
event,values = window.read()
#print('event:',event)
#print('values:',values)
print('FolderBrowse:',values['FolderBrowse'])
print('FileBrowse:',values['FileBrowse'])
if event is None or event == 'Cancel':
break
if event == 'Submit':
# if folder was not selected then use current folder `.`
foldername = values['FolderBrowse'] or '.'
filenames = os.listdir(foldername)
print('folder:',foldername)
print('files:',filenames)
print("\n".join(filenames))
window.close()
可以类似的方式将文本放入某些小部件-即。 MultiLine()
-按Submit
import PySimpleGUI as sg
import os
layout = [
[sg.Input(),[sg.Text('Files')],[sg.Multiline(key='files',size=(60,30),autoscroll=True)],values = window.read()
if event is None or event == 'Cancel':
break
if event == 'Submit':
foldername = values['FolderBrowse'] or '.'
filenames = os.listdir(foldername)
# it uses `key='files'` to access `Multiline` widget
window['files'].update("\n".join(filenames))
window.close()
顺便说一句:系统可能会按创建顺序提供文件名,因此您可能必须对它们进行排序
filenames = sorted(os.listdir(foldername))
编辑:
要获取不带Submit
的文件名,您可能必须使用普通的Button
,它将使用foldername = PopupGetFolder(...,no_window=True)
执行代码。
import PySimpleGUI as sg
import os
layout = [
[sg.Input(),sg.Button('FolderBrowse')],[sg.Exit()],values = window.read()
print(event)
if event is None or event == 'Exit':
window.close()
break
if event == 'FolderBrowse':
foldername = sg.PopupGetFolder('Select folder',no_window=True)
if foldername: # `None` when clicked `Cancel` - so I skip it
filenames = sorted(os.listdir(foldername))
# it use `key='files'` to `Multiline` widget
window['files'].update("\n".join(filenames))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。