やりたいこと
PysimpleGUIでファイル/フォルダなどを取得したい。(ボタン1つで)
1.ポップアップで取得する
公式のドキュメントはこちら
これを見るのが一番早いと思います。ここでは特に重要なものを紹介します。
ファイルを1つ取得
import PySimpleGUI as sg
value = sg.popup_get_file('ファイルを選択してください!')
print(value)
Browseを押すとファイルダイアログが開きます。
Okを押すとテキストボックスの入力値が、Cancelを押すとNone
が帰ってきます。
「Browse」「Ok」「Cancel」などを日本語にはできないようですね。
ファイルを複数取得
import PySimpleGUI as sg
value = sg.popup_get_file('ファイルを選択してください', multiple_files=True)
print(value)
multiple_files=True
を追加すれば、ファイルを複数選択できるようになります。
Okを押すと、選択したファイルが;
区切りで返ってきます。
ファイルの拡張子を指定
value = sg.popup_get_file('ファイルを選択してください',
file_types=(('Text Files', '.txt'),('すべてのファイル', '.*')))
print(value)
file_types=((typeの名前
,.拡張子名
),) のように、tuple区切りで指定します。
サンプルコードは拡張子が.txtのファイルか、すべてのファイルを取得できるようにしたものです。
macだとこの機能がうまく働かないようですので注意してください。
フォルダを取得
popup_get_file
をpopup_get_folder
に変えるだけです。(multiple_filesやfile_typesは使えません)
2.FilesBrowseやFolderBrowseを使う
公式のドキュメントはこちら
import PySimpleGUI as sg
layout = [
[sg.Text('ファイルを選択して下さい')],
[sg.InputText(),sg.FileBrowse('開く', key='filebtn')],
[sg.Button('パスを表示', key='printbtn')]
]
win = sg.Window('ファイルの選択', layout)
while True:
event,value = win.read()
if event == 'printbtn':
print(value['filebtn'])
elif event == sg.WIN_CLOSED:
break
win.close()
実行結果
開くをクリックするとファイルダイアログが開き、ファイルを選択すると、 InputText の領域にファイル名が表示されます。
パスを表示をクリックするとファイル名が出力されます。
ファイルを複数取得可にしたい場合はFileBrowse
をFilesBrowse
にします。
フォルダを取得したい場合はFolderBrowse
にします。
ボタン一つでやりたい
InputTextをなくして、かつファイルを選択したときに(パスを表示を押さなくても)自動でパスが出力されるようにしたい。
import PySimpleGUI as sg
layout = [
[sg.Text('ファイルを選択して下さい')],
[sg.FileBrowse('開く', key='filebtn', enable_events=True)]
]
win = sg.Window('ファイルの選択', layout)
while True:
event,value = win.read()
if event == 'filebtn':
print(value['filebtn'])
elif event == sg.WIN_CLOSED:
break
win.close()
InputText
は、別になくてもかまわないので普通になくす。
また、FileBrowse
にenable_events=True
を追加し、eventで検出できるようにする。