概要
TkinterのダイアログでOKボタンやキャンセルボタンが押された際に、戻り値を取得してその後の処理を変えたい場合があります。
この記事では、SimpleDialogを使って戻り値を取得する方法を解説します。
環境
以下の環境で動作を検証しています。
- Windows10
- Python3.11
SimpleDialogで戻り値を取得する
基本の形
以下のコードはself.varというインスタンス変数をself.get_var()というメソッドで呼び出し元に返す処理を表現したものです。
from tkinter import simpledialog
class CustomDialog(simpledialog.Dialog):
def __init__(self, master):
self.var = False
super().__init__(parent=master, title="dialog")
def get_var(self) -> bool:
"""
ダイアログ上の値を返すメソッド
"""
return self.var
print(CustomDialog(None).get_var())
これを実行し、OKボタンまたはCancelボタンを押すと、Falseがコンソール上に表示されます。
行っていることは単純でCustomDialog(None)でCustomDialogクラスのインスタンスを作成し、get_var()メソッドを呼び出しています。
OKとCancelで戻す値を変える
次のコードはOKボタンとCancelボタンで戻す値を変える処理を表現したものです。
from tkinter import simpledialog
class CustomDialog(simpledialog.Dialog):
def __init__(self, master):
self.var = False
super().__init__(parent=master, title="dialog")
def apply(self):
"""
OKボタンが押された場合だけに呼び出される
"""
self.var = True
def get_var(self) -> bool:
return self.var
print(CustomDialog(None).get_var())
applyメソッドはsimpledialog.Dialogクラスに実装されており、OKボタンを押した際に呼ばれる処理です。
それをオーバーライドします。
このコードを実行するとOKボタンを押した場合はTrue、Cancelボタンを押した場合はFalseと値がコンソールに表示されます。