簡體   English   中英

使用 PysimpleGUI FileBrowse() 函數時如何顯示文件夾中的文件?

[英]How to display files in folder when using PysimpleGUI FileBrowse() function?

首先,PySimpleGUI 很棒! 但是,我不知道如何在使用 folderbrowse() 時顯示文件夾中的所有文件?

或者,是否可以在發件箱中的選定文件中打印文件名? 請我能得到一些指導。

使用 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.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM