使用 PysimpleGUI FileBrowse() 函数时如何显示文件夹中的文件?
How to display files in folder when using PysimpleGUI FileBrowse() function?
首先,PySimpleGUI 很棒!但是,我不知道如何在使用 folderbrowse() 时显示文件夹中的所有文件?
或者,是否可以打印发件箱中选定的文件名?请给我一些指导。
谢谢!
FileBrowse()
和 FolderBrowse()
是不同的小部件。
FolderBrowse()
仅用于 selecting 文件夹,因此它不显示文件。
FileBrowse()
用于 selecting 文件,因此它显示文件和文件夹(但您不能 select 文件夹来获取它)。
FileBrowse()
给出 selected 文件夹的完整路径,稍后您应该使用
os.listdir(folder)
获取 selected 文件夹中所有文件和文件夹的名称(但子文件夹中没有名称)
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.FolderBrowse('FolderBrowse')],
[sg.Submit(), sg.Cancel()],
[sg.Text('Files')],
[sg.Multiline(key='files', size=(60,30), autoscroll=True)],
]
window = sg.Window('Test', layout)
while True:
event, 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.Text('Files')],
[sg.Multiline(key='files', size=(60,30), autoscroll=True)],
[sg.Exit()],
]
window = sg.Window('Test', layout)
while True:
event, 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))
首先,PySimpleGUI 很棒!但是,我不知道如何在使用 folderbrowse() 时显示文件夹中的所有文件?
或者,是否可以打印发件箱中选定的文件名?请给我一些指导。
FileBrowse()
和 FolderBrowse()
是不同的小部件。
FolderBrowse()
仅用于 selecting 文件夹,因此它不显示文件。
FileBrowse()
用于 selecting 文件,因此它显示文件和文件夹(但您不能 select 文件夹来获取它)。
FileBrowse()
给出 selected 文件夹的完整路径,稍后您应该使用
os.listdir(folder)
获取 selected 文件夹中所有文件和文件夹的名称(但子文件夹中没有名称)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.FolderBrowse('FolderBrowse')],
[sg.Submit(), sg.Cancel()],
[sg.Text('Files')],
[sg.Multiline(key='files', size=(60,30), autoscroll=True)],
]
window = sg.Window('Test', layout)
while True:
event, 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.Text('Files')],
[sg.Multiline(key='files', size=(60,30), autoscroll=True)],
[sg.Exit()],
]
window = sg.Window('Test', layout)
while True:
event, 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))