Python メッセージボックスの作り方(ルートウィンドウの消し方も!)
今回はtkinterを使用して、メッセージボックスの作成を行います。とりあえず、物は試しということで、表示させてみましょう。
説明もかねて複数の種類の画面を連続で表示させます。print(ans)で戻り値を表示させています。
from tkinter import messagebox
#ボタン(マーク)
# OK(i)
ans=messagebox.showinfo("title", "Hello world")
print(ans)
# OK(!)
ans=messagebox.showwarning("title", "Hello world")
print(ans)
# OK(×)
ans=messagebox.showerror("title", "Hello world")
print(ans)
# はい・いいえ(?)
ans=messagebox.askyesno("title", "Hello world")
print(ans)
# はい・いいえ(?)
ans=messagebox.askquestion("title", "Hello world")
print(ans)
# OK・キャンセル(?)
ans=messagebox.askokcancel("title", "Hello world")
print(ans)
# 再試行・キャンセル(!)
ans=messagebox.askretrycancel("title", "Hello world")
print(ans)
表示される画面を表にしてみました。必要に応じて使い分けましょう。
見てわかるように「askyesno」と「askquestion」の違いは戻り値の違いだけです。
最後に今回のコードを実行するとtkinterの仕様で画面が2個表示されたかと思います。これはなぜかというと、tkinterはメイン(親)の画面があって、その子ウィンドとしてメッセージボックスを表示する仕様になっているからです。ほとんどの場合は何か親ウィンドがあって、ボタン押したときにメッセージボックスを表示させると思うのであまり気にしなくてもいいのですが。
もし親ウィンドを表示させたくなければ、以下のように追記してください。
withdraw()だけを追記するように書いているサイトもありますが、私の場合はattributes等もないと消えてくれませんでした。
from tkinter import messagebox,Tk
root=Tk()
root.geometry('300x300')
root.attributes('-topmost',True)
root.withdraw()
#ボタン(マーク)
# OK(i)
ans=messagebox.showinfo("title", "Hello world")
print(ans)
# OK(!)
ans=messagebox.showwarning("title", "Hello world")
print(ans)
# OK(×)
ans=messagebox.showerror("title", "Hello world")
print(ans)
# はい・いいえ(?)
ans=messagebox.askyesno("title", "Hello world")
print(ans)
# はい・いいえ(?)
ans=messagebox.askquestion("title", "Hello world")
print(ans)
# OK・キャンセル(?)
ans=messagebox.askokcancel("title", "Hello world")
print(ans)
# 再試行・キャンセル(!)
ans=messagebox.askretrycancel("title", "Hello world")