PySimpleGUI ファイル選択
# プログラム
sg.InputText と sg.FileBrowse を横に並べるだけで可能。
import PySimpleGUI as sg
layout = [
[sg.Text("ファイル"), sg.InputText(), sg.FileBrowse(key="file1")],
[sg.Submit(), sg.Cancel()],
]
window = sg.Window("ファイル選択", layout)
event, values = window.read()
window.close()
print(values)
上記は、選択したファイルのパスを取得するプログラム。詳しい解説は挙動説明の後。
# 実行時の挙動について
実行すると最初は以下のような画面が現れる。
Browse ボタンを押すとファイルダイアログが開く(画像はWindows)
ファイルを選択すると、 InputText の領域にファイル名が表示される。
最後に Submit ボタンを押して取得したファイル名がprintされる。
{0: 'C:/Users/admin/test/hoge.txt',
'file1': 'C:/Users/admin/test/hoge.txt'}
# プログラムの解説
layout = [
[sg.Text("ファイル"), sg.InputText(), sg.FileBrowse(key="file1")],
[sg.Submit(), sg.Cancel()],
]
InputText と FileBrowse は、隣同士に配置するだけで、選択したファイル名が自動でInputTextに挿入される。
ちなみに、明示的に対応付けをしたいときには、以下のようにInputText のキーをFileBrowseのターゲットとして設定すること。
import PySimpleGUI as sg
layout = [
[sg.Text("ファイル"), sg.InputText(key="input1")],
[sg.FileBrowse(key="file1", target="input1"), sg.Submit(), sg.Cancel()],
]
window = sg.Window("ファイル選択", layout)
event, values = window.read()
window.close()
print(values)
最初のプログラム解説の続きに戻る。
window = sg.Window("ファイル選択", layout)
event, values = window.read()
window.close()
print(values)
window.read() の返り値eventは、どんなイベントが起こったか、valuesにはどんな値が入力されたかのデータが入る。
「ダイアログで選択したファイルのパスの文字列」を取得するには、FileBrowse() でkey を指定すると良い。values(辞書)のfile1キーの値として取得できる。printの結果の通り、自動で番号が付与されるけど、keyを指定したほうがわかりやすい。
参考にしたレシピはこちら
公式のドキュメント、デモプログラム等は以下です。
http://PySimpleGUI.org
http://calls.PySimpleGUI.org
http://Cookbook.PySimpleGUI.org
http://Demos.PySimpleGUI.org
http://Trinket.PySimpleGUI.org
http://YouTube.PySimpleGUI.org
http://PySimpleGUI.com
PySimpleGUIのおおまかな紹介(日本語)は以下のnoteに書いてます。