2020.08.24
こんにちは、R&Mグループの内田です。
Python でGUIアプリケーションを作るとき、標準ライブラリの Tkinter を使ったりします。
その際、ダイアログボックスのデフォルトの機能のままだとやりたいことができなかったので、ちょっと改造してみました。
例えば、標準のままだとこんな感じのボックスが出力できると思います。

やりたいことは以下です。
以下サイトを参考にします。
https://effbot.org/tkinterbook/tkinter-dialog-windows.htm
※作業環境…Python 3.7.7使用
Tkinter のライブラリのソースコードを見てみると
simpledialog.py の中の、 Dialog クラスが、カスタマイズ用のベースとして使用できるようなっているようです。
https://github.com/python/cpython/blob/3.7/Lib/tkinter/simpledialog.py
Dialog クラスを継承して新しいクラスを作り、ダイアログボックスの表示を構成している”body”メソッドと、OKやキャンセルボタンを配置している”buttonbox”メソッドあたりをオーバーライドすればいけそうな気がします。
import tkinter as tk
from tkinter import simpledialog
class MyDialog(simpledialog.Dialog):
def body(self, master):
'''ダイアログボックスの表示
どのラジオボタンがクリックされたかself.varに格納(Red=1,Green=2,Blue=3)
ラジオボタンをクリックした際にはswitchButtonStateメソッドでOKボタンをenableにする
'''
self.var = tk.IntVar()
rdo1 = tk.Radiobutton(master, value=1, variable=self.var, command=self.switchButtonState, text='Red').pack(side=tk.LEFT, padx=5, pady=5)
rdo2 = tk.Radiobutton(master, value=2, variable=self.var, command=self.switchButtonState, text='Green').pack(side=tk.LEFT, padx=5, pady=5)
rdo3 = tk.Radiobutton(master, value=3, variable=self.var, command=self.switchButtonState, text='Blue').pack(side=tk.LEFT, padx=5, pady=5)
def buttonbox(self):
'''OK,キャンセルボタンの配置
OKボタンはデフォルトではdisableにしておく
'''
box = tk.Frame(self)
self.button1 = tk.Button(box, text="OK", width=10, command=self.ok, state=tk.DISABLED)
self.button1.pack(side=tk.LEFT, padx=5, pady=5)
self.button2 = tk.Button(box, text="Cancel", width=10, command=self.cancel)
self.button2.pack(side=tk.LEFT, padx=5, pady=5)
box.pack()
def switchButtonState(self):
# ボタンの有効化
if self.button1['state'] == tk.DISABLED:
self.button1['state'] = tk.NORMAL
def apply(self):
# ダイアログボックスを閉じた後にラジオボタン選択結果出力
print(self.var.get())
def test():
root = tk.Tk()
def doit(root=root):
d = MyDialog(root)
t = tk.Button(root, text='Test', command=doit)
t.pack()
q = tk.Button(root, text='Quit', command=t.quit)
q.pack()
t.mainloop()
test()


# python MsgBox.py
2
※2=Greenの番号
標準ライブラリに関しては、マニュアルや本などで使い方を覚えて流すことが主だったので、きちんとソースコード読むことは大事だなあと思いました。
サンビット株式会社では、開発技術者を募集しています!
興味のある方はぜひお問い合わせください。

2026.06.22
2026年4月から始まった自転車の青切符制度。施行当初は大きな話題となりましたが、実際の街中ではどのような変化が起きているのでしょうか。法改正によって自転車が車両であるという意識は高まった一方、一時不停止や踏切での停止など実際の運用とのギャップも感じられる状況です。交通ルールや安全運転について改めて考えてみました。
2026.06.15
普段何気なく使っているExcelとWordですが、それぞれに得意な作業があります。集計表や名簿ならExcel、お知らせ文や報告書ならWordなど、目的に合わせて選ぶことで作業効率も修正のしやすさも変わります。日常業務で迷いやすい使い分けを、具体例を交えてわかりやすく紹介しています。
2026.06.08
今回は、初めて訪れた青森県の奥入瀬渓流の感動を綴った旅行記です。新緑の美しさや苔の表情、川の流れや滝の音、森の香りなど、五感で味わう自然の魅力満載です。実際に自然の中を歩くことで気づく奥入瀬の美しさを紹介しています。
2026.06.01
一倉定氏の著書『一倉定の経営心得』を通じて、経営の本質を考察しました。「会社の真の支配者は、お客様である」「優柔不断は、誤った決定よりなお悪い」など、厳しくも核心を突く提言から、社長の決断力や顧客視点の重要性をあらためて実感した内容です。