今回やること
今回はめったにやらないTkinterの記事です。なかなか他のサイトでは詳しく教えられていないようなので、
今回の記事で超詳しくメッセージボックスについて100%説明します。(自分でハードル上げていく)
基本型
ここらへんは他のサイトでものっていることです。import tkinter import tkinter.messagebox as messagebox messagebox.showinfo ("タイトルです。","メッセージです。") #情報アイコンを表示 messagebox.showwarning ("タイトルです。","メッセージです。") #警告アイコンを表示 messagebox.showerror ("タイトルです。","メッセージです。") #エラーアイコンを表示ここはあまり詳しい説明はいらなそうですね。OKボタンのみを表示させたい場合は、大きく分けてこの3つになります。
ですが。
OKボタンだけだけど、質問アイコンを表示さえたい。ってとき。tkinterのメッセージボックスはカスタマイズできるので、それについては後で紹介します。
選択肢を増やす
[はい][いいえ]や[OK][キャンセル]などのボタンを増やします。これも他のサイトでよく紹介されますが、一応触れておきましょう。
import tkinter.messagebox as messagebox messagebox.askyesno("タイトル","質問メッセージです。") messagebox.askokcancel("タイトル","OK Cancel質問です。") messagebox.askyesnocancel("タイトル","はいいいえキャンセル質問です。") messagebox.askretrycancel("タイトル","再試行キャンセル質問です。")
ここで思ったのが、再試行キャンセルの場合って、勝手にアイコンが警告アイコンになるんですよね。
これにどう対処するか。その方法もこの記事にかかれているのでみてください。
んで、戻り値についてですが、今まであげた関数については基本的にTrue False Noneという感じになります。
[はい]や[OK]がTrueになりますし、[いいえ]がFalseになります。
[キャンセル]はボタン2つの場合はFalseになりますし、ボタン3つの場合はNoneというふうになります。
サンプルコードはこんな感じにできます。
import tkinter.messagebox as messagebox user = messagebox.askokcancel("確認","のこり30秒でシャットダウンしますよ。(嘘です)") if user == True: #[OK]がクリックされたら... (if user: でも可) messagebox.showwarning("お知らせ","OKがクリックされました。\n30秒後にシャットダウンします(大嘘)") elif user == False: #[キャンセル]がクリックされたら... (else: でも可) messagebox.showinfo("お知らせ","キャンセルがクリックされました。\nシャットダウンをキャンセルします。")また、さらに、そして、
ボタン3つの場合のサンプルコードはこんな感じです。
import tkinter.messagebox as messagebox user = messagebox.askyesnocancel("Microsoft Excel (大嘘)","変更した内容を保存しますか") if user == True: #[はい]がクリックされたら... (if user: でも可) messagebox.showinfo("Microsoft Excel (大嘘)","保存しました (うそ)") elif user == False: #[いいえ]がクリックされたら... messagebox.showwarning("Microsoft Excel (大嘘)","保存しませんでした。") elif user == None: #[キャンセル]がクリックされたら... (else: でも可) messagebox.showinfo("Microsoft Word (大嘘、Wordに変わってる)","キャンセルしました。")
はい。他のサイトでも紹介されそうなところはここで終了。こおからが本番ですよ。
カスタマイズする - アイコン
まずは、[OK]ボタンしかないのに質問アイコンをださせる という方法です。こんな感じのコードになります。
import tkinter.messagebox as messagebox messagebox.showinfo("タイトル","カスタマイズされたメッセージボックス",icon="question")
なんか質問してないのに質問アイコン出るの違和感ありますが、こんな感じで、iconを引数に指定すると、すきなアイコンにすることができます。これは[OK]ボタンしかないメッセージボックスに限ったことではありません。
[再試行][キャンセル]のボタンにしてしまうと、勝手に警告アイコンになりますが、このやり方を使えばそのモヤモなが解消されます。
Excelなどを再現してみると、こんな感じにカスタマイズできます。
import tkinter.messagebox as messagebox user = messagebox.askyesnocancel("Excel (大嘘)","ブックの内容を保存しますか",icon="warning") print(user) #アイコンのみを変更しても戻り値は変わらない
アイコンの指定も覚えやすく、警告アイコンなら"warning"になりますし、情報アイコンなら"information"で、エラーアイコンなら"error"、質問アイコンなら"question"となります。
カスタマイズ - ボタン
アイコンだけではなく、ボタンも変更できます。ボタンを変更するには、messagebox.askquestionのtype=オプションを指定します。
import tkinter.messagebox as messagebox user = messagebox.askquestion("タイトル","メッセージ内容です。",type="retrycancel",icon="error") if user == "retry": messagebox.showinfo("再試行","再試行") else: messagebox.showinfo("キャンセル","キャンセル")さらに、askquestionだと、戻り値が異なります。
import tkinter.messagebox as messagebox user = messagebox.askquestion("Error","エラーが何故か発生しました",type="abortretryignore",icon="error") if user == "abort": messagebox.showinfo("情報","中止がクリックされました。") elif user == "retry": messagebox.showinfo("情報","再試行がクリックされました。") elif user == "ignore": messagebox.showinfo("情報","無視がクリックされました。")
いいですね。
こんな感じでaskquestionと組み合わせると、自分好みのメッセージボックスをつくることができます。
カスタマイズ - デフォルトボタン
これはどういうことかというと、例えば、はいといいえのボタンがあったとして、それで、「はい」の方にフォーカスが入った状態にします。これは、「はい」がデフォルトのボタンということになり、この状態でエンターキーを押すとはいが反応します。反対に「いいえ」の方をデフォルトボタンにすると、おの状態でエンターキーを押すと「いいえ」が反応します。
あまり必要のない気がするけど、やってみましょう。 デフォルトボタンを指定するのは簡単で、default= と指定すればいいでけです。超簡単です。
import tkinter.messagebox as messagebox messagebox.askquestion("タイトル","メッセージ内容です。",type="yesnocancel",icon="warning", default="no")
はい。こんな感じで「いいえ」に青い囲みがあり、この状態でEnterキーやスペースキーを押すと「いいえ」が反応します。
defaultに入るのは文字列で以下のようなものが指定できます。
めんどくさくなったのでまた今度ここに追記しておきたいと思います。
質問、要望、疑問、コメント、感想、気軽にどうぞ!!
0 件のコメント:
コメントを投稿