PySimpleGUI ポップアップ一覧

PySimpleGUI

メモも兼ねて、PySimpleGUIに標準で用意されているポップアップの中から使えそうなやつを紹介します。コードは最低限しか載せませんが察してください。

また、ほとんどのポップアップは基本となる「sg.popup」の引数をしっかり設定すれば同じ機能を再現できるので、微妙にカスタマイズしたいときなどは適宜ご利用ください。

PySimpleGUI version 4.18.0

Python 3.8

PySimpleGUIに標準で用意されているポップアップの一覧

popup_ok_cancel OK or Cancelの2択

import PySimpleGUI as sg
value = sg.popup_ok_cancel('OK Cancel')
print(value)

OKボタンとCancelボタンが用意されたポップアップです。

とてもシンプルでオススメです。使う機会も多いのではないでしょうか?

valueには”OK”または”Cancel”が返ってきます。

また、ポップアップをタイトルバーのバツボタンで閉じるとNone(PythonのNoneType)が返ってきます。これは他のポップアップでも同様です。以下特に言及がない場合はNoneはstrではなくNoneTypeです。

sg.popup_yes_noというポップアップもあります。テキストが変わるだけなので、お好きな方を。

popup_get_file ファイルダイアログを開く

import PySimpleGUI as sg
value = sg.popup_get_file('get file')
print(value)

これもオススメです。たった1行でファイルを選択させる機能が実装できます。

sg.FileBrowseやsg.Inputを使ってメイン画面で同じ機能を実装することもできますが、それだけのためにメイン画面を占有するのもオシャレじゃないので、ポップアップで実現できるのは助かりますね。

OKを押すとテキストボックスの入力値が、Cancelを押すとNoneが返ってきます。

また、このポップアップには便利な引数が用意されているので以下のようにカスタマイズできます。(FileBrowseのウィジェットと同じような引数が用意されています)

multiple_files = True 複数ファイル 

import PySimpleGUI as sg
value = sg.popup_get_file('get file multi', multiple_files=True)
print(value)

文字通りですが、複数ファイルを選択したい場合は、mulitiple_filesをTrueにします(デフォルトはFalse)

テキストボックスに選択したファイルが「;」区切り(セミコロンだけ。前後スペースなし)で入力されます。

OKを押すと入力値がそのまま返ってくるので、適宜split(‘;’)などで分割しましょう。

save_as = True ファイル保存 

import PySimpleGUI as sg
value = sg.popup_get_file('save', save_as=True)
print(value)

開くファイルの選択ではなく、ファイルの保存場所や保存ファイル名を設定したい時は、save_as=Trueとします。

これだけでブラウザボタンのテキストや、ファイルダイアログ画面もしっかりとファイル保存用のものに変わります。めっちゃ便利!!!

file_types = ((“type”, “*.拡張子”),) ファイルタイプの指定 

import PySimpleGUI as sg
value = sg.popup_get_file('save', save_as=True, file_types=(("Text Files", ".txt"),))
print(value)

扱うファイルの拡張子を指定する場合はfile_typesを指定します。

ちょっと宣言がややこしいのですが、タプルのタプルで指定しなければいけません。

なので一つだけ指定したい場合は上記のように((“typeの名前”,”.拡張子”),)と指定するようです。(最後のカンマがないとダメです)

複数指定する場合はカンマに続けて他の拡張子を記入しましょう。

注意 PCがmacだとこの機能がうまく働かないようです。(私はmacなのでこの機能については動作確認できていません。便利そうなので一応紹介だけしております・・・・)

popup_get_folder フォルダを指定

import PySimpleGUI as sg
value = sg.popup_get_folder('get forder')
print(value)

ファイル単位ではなく、フォルダ単位で指定したい場合は、こちらのポップアップを使用します。

popup_scrolled テキストをたくさん表示

import PySimpleGUI as sg
value = sg.popup_scrolled('なぜか\n編集できるよ??')
print(value)

ポップアップで長文を表示させたいときにスクロールバー付きでテキストを表示させられます。

ただし、ポップアップ中のテキスト文を編集できてしまうのでご注意ください。

OKを押して返ってくるのはテキストの内容ではなく、ただの”OK”です。

popup_error

import PySimpleGUI as sg
value = sg.popup_error('Error')
print(value)

みんな大好きErrorのポップアップです。

ボタンが赤くなって、テキストがErrorになっただけですが、なんか好きなので一応紹介。

valueには”Error”が返ってきます。

ボタンとセットのポップアップ

先に紹介したポップアップはコードをみていただければわかるようにポップアップを呼び出す関数です。好きなタイミングで関数を実行すればポップアップが表示されて、その返り値を受け取ることができます。

次に紹介するのは正確にはボタンなので、画面のレイアウトの中に組み込む必要があるという制約があるのですが、とても高機能なので2つ紹介しておきます。(上で紹介したポップアップを呼び出すようなボタンもだいたいあります)

CalenderButton カレンダー呼び出し

ボタンを押すとカレンダーがポップアップ表示されて、押した日付が返ってきます。(なぜか時間もついてきます。今の所返り値の様式指定はできなさそうです??)

上で紹介していたポップアップを呼び出す関数ではなく、あくまでボタンなので以下のように使う必要があります。

import PySimpleGUI as sg

layout = [[sg.Text('Calender Button')],
                                   # カレンダーの返り値を収納する先をtarget引数で指定
         [sg.Input(key='-Input-'), sg.CalendarButton('calender', target='-Input-')]]

window = sg.Window('Calender', layout=layout)

while True:
    event, value = window.read()
    if event is None:
        break

window.close()

target引数の設定と、収納先のエレメント(今回はsg.Input)を用意しておかないとカレンダーが呼び出されてボタンを押せるものの、その結果がどこにも反映されない状態になるので気をつけてください。

ColorChooserButton 色を選択

こちらはパレットが表示されて色を選択できます。返り値はカラーコードです。

使い方はカレンダーボタンと同じです。

import PySimpleGUI as sg

layout = [[sg.Text('Color Button')],
         [sg.Input(key='-Input-'), sg.ColorChooserButton('ColorButton', target='-Input-')]]

window = sg.Window('Color', layout=layout)

while True:
    event, value = window.read()

    print(event, value)
    if event is None:
        break

window.close()

まとめ

いくつかポップアップを紹介しました。

その他、表示されて1秒たたずに自動で閉じるpopup_quick, popup_no_waitなど変わったものもあります。(使い道が私にはわかりませんでした・・・・)

ファイルダイアログ周りのポップアップは大変便利ですし、カレンダーやパレットなどなかなか自分では実装できそうにないおしゃれな機能もあります。積極的に使ってみてはいかがでしょうか?

巷ではWebアプリが人気かと思いますが、デスクトップアプリ(GUIアプリ)も楽しいですよ。

もっと複雑なポップアップを実装したい場合は、こちらの記事も参考になるかもしれません。

コメント

タイトルとURLをコピーしました