Python日記 選択肢Widget その2 If と メッセージボックス

アプリ実行プラグラム本体について

前回までの作成画面。

コードを全部載せると長くなるので、layout による画面デザイン部分の後に続くパートのみとする。

window = SG.Window('Widget 演習中', layout,size=(600,400)) # ウィンドウのタイトルとサイズを設定

while True:  # ウィンドウを表示し続ける
    event, values = window.read()   #event 変数にイベント発生要素を検知し values で値参照
    print(event, values) # コードウィンドウに入力値を列挙させる
    if event == SG.WIN_CLOSED or event == '閉じる':
        break
    if event == '実行':
        # テキストボックスに結果表示
        window['姓名'].update(values['姓']+values['名'])
        if values["回答拒否"]:  #チェックボックスを確認
            X=SG.popup_ok_cancel("回答拒否になっていますが、どうして ?",title="入力チェック")   #メッセージボックス表示
            SG.popup(X+"ですね、わかりました ( ´ー`)",title="最終確認")

window.close()

While True : 無限ループ処理

ユーザーの操作を待ち続けるウィンドウは 公式サイトでは”永続ウィンドウ”と称されている。前回書かなかった処理をすべてメモしておこう。
event, values = window.read() は、ウィンドウ描画をしてイベントを監視する(たぶん)定型文。
event valueswindow.read() の1行目のコードで定義されたウィンドウ描画関数(?)の実行時にイベント動作結果を取得する組込変数で、名前のとおり、event にはイベント発生エレメント、values にはすべてのキーと値が代入される。ひとつの関数で複数の変数に代入するという、見慣れないと戸惑うが、後の処理を考えると合理的だと理解できる。
print(event, values) はプラグラム実行には関係しないが、イベント発生時にVSCode(エディタ)のデバッグウィンドウに変数値を表示してくれる。
“閉じるボタン”を押された時には、イベント発生エレメント{ キー : 値, ・・・}の形式で列挙される。

閉じる {'姓': '田中', '名': '健一', '男性': True, '女性': False, '性別不明': False, '回答拒否': True}

エレメント値の確認が一行のコードで完結するというめちゃくちゃ便利機能。
後の処理はイベントプロシージャの代わりに、条件分岐文を書くことになる。

if 文 : 条件分岐

サンプルではまだまだ検知すべきイベントが少ないが、エレメント(Widget)の多い画面では、エラー処理も含めてここだけで数100行にもなるのだろうなと気が重くなるが仕方ない。後に大嫌いになった古の”一括処理”を思い出した
サンプルコードでは、実行ボタンが押された場合に
if event == SG.WIN_CLOSED or event == ‘閉じる’:
break
としている。event 変数が”閉じる”なので値の取得はない。比較式の統合は == になる。SG.WIN_CLOSED はPython(PySimpleGUI?) のシステム定数であり、ウィンドウ右上のおなじみ”✕”ボタン。
or でつないで他のイベント発生元である”閉じる”を検知して、次行の break を実行してループを抜け、ウィンドウ画面を閉じる。実行部が短くて単純処理なら

サンプルではまだまだ検知すべきイベントが少ないが、エレメント(Widget)の多い画面では、エラー処理も含めてここだけで数100行にもなるのだろうなと気が重くなるが仕方ない。後に大嫌いになった古の”一括処理”を思い出した
サンプルコードでは、実行ボタンが押された場合に
if event == SG.WIN_CLOSED or event == ‘閉じる’:
break
としている。event 変数が”閉じる”なので値の取得はない。比較式の統合は == になる。SG.WIN_CLOSED はPython(PySimpleGUI?) のシステム定数であり、ウィンドウ右上のおなじみ”✕”ボタン。
or でつないで他のイベント発生元である”閉じる”を検知して、次行の break を実行してループを抜け、ウィンドウ画面を閉じる。実行部が短くて単純処理なら、コロンが条件式の終わり記号なので
if event == SG.WIN_CLOSED or event == ‘閉じる’: break でも問題ない。

if 文の文法
if 条件式1:
    条件式1が真の時に実行する文
elif 条件式2:
    条件式1が偽で条件式2が真の時に実行する文
elif 条件式3:
    条件式1及び条件式2が偽で条件式3が真の時に実行する文
else:
    すべての条件式が偽のときに実行する文

popup : チェックボックスの値に対応してメッセージボックスを表示

エレメントの値参照は values[“キー名”]: になる。
チェックボックスがチェックされていたら、if values[“回答拒否”]: に合致してジャンプする。
メッセージボックス表示には popup 関数(?) を用いる。SG.popup(文字列) が単純なメッセージを表示する最小の書き方。ここでは、popup_ok_cancel() によって、”OK”または”Cancel”とういう文字列が返され、X 変数に代入する。

X=SG.popup_ok_cancel("回答拒否になっていますが、どうして ?",title="入力チェック")  
SG.popup(X+"ですね、わかりました ( ´ー`)",title="最終確認")

実行結果は下のとおり。実際の運用では、まじめな文面にするだろう。
左のメッセージボックスでCancel ボタンが押された場合には X 変数と文字列を連結して右のようなメッセージ文になる。もちろん変数名は命名規則に外れてなければ何でもかまわない。

最初の確認メッセージボックス

Cancel ボタンを押した結果

サンプルコードではここで終わり。左のメッセージボックスでどちらを押してもメッセージボックスが消えて元の画面に戻るだけ。何か処理をしたければ If 文で分岐すれば良いだけなので省略。
ふぅ、疲れた。続きは次号にて。(;`ー´)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA