[英]How to display files in folder when using PysimpleGUI FileBrowse() function?
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.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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.