このページでは、Python でのメッセージボックスの使い方について解説していきます。
Contents
メッセージボックスとは
まずは、メッセージボックスについて簡単に説明しておきます。
メッセージボックス
メッセージボックスとは、下の図のような、ユーザーに対して何らかの情報を通知したり、ユーザーに対して何らかの判断・選択を依頼したりするウィンドウのことを言います。メッセージボックスは、アプリとは別のウィンドウをポップアップで表示されることが多いです。
こういったメッセージボックスは、Python では Tkinter を利用することで簡単に表示することが可能です。
スポンサーリンク
メッセージボックスの見た目
実際に Tkinter を利用して表示されるメッセージボックスの見た目は下の図のようなものになります。この図からも分かるように、同じ Tkinter で表示したとしても、メッセージボックスの見た目は OS によって大きく異なります。
Windows の場合は、メッセージボックスにタイトルが表示されたり閉じるボタンが表示されたりしますが、Mac の場合にはそれらは存在しません。また、Windows の場合は、基本的にボタン名は日本語で表示されますが(OK
は除く)、Mac の場合は、ボタン名は英語で表示されるようになっているようです。おそらく、Windows の場合はアプリを起動する PC の言語設定によってボタン名の表示が変化するのだと思います。
こういった見た目の違いがある点については注意が必要ですが、基本的なメッセージボックスの使い方に関しては OS に関わらず同じとなります。
メッセージボックスのタイプ
メッセージボックスには、大きく分けると2つのタイプのものが存在します。
1つ目が「通知用のメッセージボックス」となります。この通知用のメッセージボックスは、ユーザーにエラーや警告、もしくは何らかの情報を通知・表示することを目的としたもので、メッセージボックスには OK
等の1つのボタンのみが表示されることになります。
2つ目が「選択用のメッセージボックス」となります。この選択用のメッセージボックスは、ユーザーに何かを判断してもらうことを目的としたもので、この種類のメッセージボックスには複数のボタンが表示されることになります。例えば、OK
と キャンセル
、はい
と いいえ
等の肯定と否定を意味する2つのボタンが表示されるものや、はい
と いいえ
と キャンセル
等の3つのボタンが表示されるもの等が存在します。
そして、メッセージボックスに表示されるメッセージに対する回答をボタン押下によってユーザーに選択してもらうというのが、この選択用のメッセージボックスの使い方となります。
Python の Tkinter で利用可能なメッセージボックスにも、大きく分けると上記の2つのタイプのものが存在します。さらに、細かく分けると7つのメッセージボックスが利用可能です。これらの各メッセージボックスの利用法については、後述の メッセージボックスの使い方 の章で解説を行いますし、7つのメッセージボックスの違いについては メッセージボックスの種類 で解説します。
Tkinter で開発するアプリ以外からも利用可能
このあたりの詳細に関しては、後述の メッセージボックスの使い方 で解説しますが、このメッセージボックスは Tkinter の messagebox
というモジュールから提供されるウィンドウになります。
ですが、このメッセージボックスに関しては、Tkinter で開発したアプリ以外からでも表示可能です。なので、単なるコンソールアプリにメッセージボックスを表示させるようなことも可能です。基本的には、Python 全般で使用可能なメッセージボックスと考えて良いです。
スポンサーリンク
メッセージボックスの使い方
では、ここからメッセージボックスの使い方について解説していきます。
といっても、メッセージボックスの使い方は非常に簡単で、後述で紹介する関数の実行のみでメッセージボックスを表示することが可能です。あとは、その関数が定義されているモジュールの import
を事前に行ったり、ユーザーの選択結果に応じて条件分岐を行うようにしてやれば良いだけです。
messagebox
を import
する
まず、メッセージボックスの表示は Tkinter の messagebox
から提供される機能となりますので、この messagebox
の import
を行う必要があります。この import
は、下記によって実施することができます。
from tkinter import messagebox
メッセージボックスの表示関数を実行する
messagebox
を import
すれば、後は messagebox
で定義されているメッセージボックスの表示関数を実行するだけで、メッセージボックスが画面上に表示されるようになります。めちゃめちゃ簡単ですね!
メッセージボックスの選択
ただ、messagebox
には8つのメッセージボックスの表示関数が定義されていますので、用途目的に応じて実行する関数を選択する必要があります。
前述の通り、Tkinter で利用可能なメッセージボックスの種類は7つです
それに対し、メッセージボックスの表示関数としては8つのものが定義されています
後述で解説するように、askyesno
と askquestion
に関しては同じメッセージボックスを表する関数となりますので、関数としては8つ存在しますが、利用可能なメッセージボックスの種類は7つとなります
前述でも説明したように、メッセージボックスには、通知用のメッセージボックスと選択用のメッセージボックスの2種類のものが存在します。
まず、通知用のメッセージボックスの表示関数としては、下記の3つが定義されています。
showinfo
:情報通知用メッセージボックスの表示showerror
:エラー通知用メッセージボックスの表示showwarning
:警告通知用メッセージボックスの表示
また、選択用のメッセージボックスの表示関数としては、下記の5つが定義されています。
askokcancel
:OK
/キャンセル
選択用メッセージボックスの表示askyesno
:はい
/いいえ
選択用メッセージボックスの表示askquestion
:はい
/いいえ
選択用メッセージボックスの表示askretrycancel
:再試行
/キャンセル
選択用メッセージボックスの表示askyesnocancel
:はい
/いいえ
/キャンセル
選択用メッセージボックスの表示
だいたい関数名を見れば、表示されるメッセージボックスがどんなものであるかは想像がつくと思います。各メッセージボックスの具体的な見た目等については メッセージボックスの種類 で解説を行います。
askyesno
と askquestion
に関しては、実行して表示されるメッセージボックスは同じであり、両方ともはい
/ いいえ
選択用メッセージボックスの表示を行う関数となります。ただし、これらの関数では返却値が異なります。この返却値の違いに関しても、メッセージボックスの種類 で解説を行います。
引数の指定
また、メッセージボックスは、メッセージを表示して「ユーザーに通知する」 or 「ユーザーに判断して選択してもらう」ことを目的に利用されることになります。
なので、メッセージボックスにはメッセージの表示が必要で、この表示するメッセージはメッセージボックス表示関数の message
引数で指定可能です。message
引数に指定する文字列に改行文字を含ませることで、明示的に改行することも可能です。
また、Windows の場合は、メッセージボックスのタイトルも設定可能で、このタイトルは title
引数で指定可能です。
Windows の場合は、これらの message
引数と title
引数が、Mac の場合は message
引数が、メッセージボックスの表示関数に指定が必須となる引数と考えて良いと思います。別に指定しなくても例外やエラーが発生するわけではないですが、Windows の場合はメッセージやタイトルが空となりますし、Mac の場合はメッセージに 通知
と表示されるだけになるため、「ユーザーに通知する」・「ユーザーに判断して選択してもらう」というメッセージボックスの目的が果たせなくなります。
例えば、showerror
でエラー通知用のメッセージボックスを表示するのであれば、下記のように引数を指定して showerror
関数を実行してやれば良いことになります。
messagebox.showerror(
title='エラー', # Windowsの場合のみ
message='ユーザー名には数字は使用できません'
)
その他には、icon
引数もメッセージボックスの表示関数に指定可能です。icon
引数を指定することで、メッセージボックスに表示するアイコンを変更することが可能です。
指定可能な値は下記の4つとなります。ただし、メッセージボックスの種類に応じて適切なアイコンが表示されるようになっているので、わざわざ icon
引数を指定する機会は少ないと思います。また、Mac の場合はアイコンが2つしか用意されていないので注意してください。
指定値 | Windows | Mac |
'info' |
||
'error' |
||
'warning' |
||
'question' |
さらに、default
引数も指定することが可能で、この指定によってメッセージボックス表示時にフォーカスを当てておくボタンを変更することが可能です(フォーカスが当たっているボタンはエンターキー等の入力で押下操作を行うことが可能となります)。
この default
引数に指定可能な値はメッセージボックスの種類によって異なるため、メッセージボックスの種類 で別途説明を行います。また、default
引数の初期値は、肯定を意味するボタン(OK
・はい
・再試行
)に対応する値となっています。
スポンサーリンク
押下されたボタンに応じた処理を行う
先ほど説明したように、メッセージボックスの表示関数が実行されればメッセージボックスが画面に表示されることになります。そして、これによってユーザーにメッセージを通知することができることになります。
通知用メッセージボックスの場合は、通知することが目的なので、基本的に関数の実行さえ行えば、メッセージボックスの表示で果たすべき目的が達成できることになります。
ただし、選択用メッセージボックスの場合は、ボタン押下によって、ユーザーからメッセージの内容に対する選択が行われることになります。そして、そのユーザーの選択を意味あるものにするためには、その押下されたボタンに応じて次に実行する処理を切り替えることが必要となります。
例えば、アプリの 閉じる
ボタンがクリックされた時に、「本当にアプリを終了してよろしいですか?」というメッセージボックスを表示したとしましょう。ここでユーザーが はい
ボタンを押下したときにも いいえ
ボタンを押下したときにもアプリを終了する処理を実行してしまうと、メッセージボックスを表示した意味も、ユーザーに選択してもらった意味もないですよね…。
なので、このような場合であれば、はい
ボタンが押下されたときのみアプリを終了する処理を行い、いいえ
ボタンが押下された時には何も処理を行わないようにするような「処理の切り替え」が必要となります。
で、こういった押下されたボタンに応じた処理の切り替えを実施するためには、まずは押下されたボタンを判別する必要があります。
この、押下されたボタンの判別は、メッセージボックスの表示関数の返却値から実施することが可能です。メッセージボックスの表示関数からは、押下されたボタンに応じた値が返却されることになります。なので、これらの関数の返却値から押下されたボタンを判別することができ、それによって押下されたボタンに応じた処理の切り替えを実現することができることになります。
この具体的な返却値は関数によって異なるため、詳細は メッセージボックスの種類 で説明を行います。が、例外はあるものの、基本的には肯定的な意味のボタン(はい
/ OK
/ 再試行
)が押下された時には True
、否定的な意味のボタン(いいえ
/ キャンセル
)が押下された時には False
が返却されると考えて良いです。
なので、例えば、先ほどの例のように「本当にアプリを終了してよろしいですか?」というメッセージを OK
/ キャンセル
選択用メッセージボックスで表示するのであれば、下記のように askokcancel
関数の返却値に応じた条件分岐を行えば良いことになります。
ret = message.askokcancel(
title='確認', # Windowsの場合のみ
message='本当にアプリを終了してよろしいですか?'
)
if ret:
# アプリを終了する処理を実行
ここまで説明してきたように、特に選択用メッセージボックスを表示する際には、メッセージボックスを表示するだけでなく、押下されたボタンに応じた処理の切り替えが必要となることは覚えておいてください。
ついでに説明しておくと、メッセージボックスの表示関数は、ユーザーがボタンを押下するまで終了しないようになっています。より具体的には、ユーザーがボタンを押下するまで表示関数の中で待ちが行われることになりますし、ボタン押下したタイミングで関数が終了するようになっています。つまり、関数実行の次の行に実装した処理は、メッセージボックスのボタンが押下されたタイミングで実行されるようになっています。なので、ボタンが押下されるまで待機するような処理や、ボタン押下されたことを検知・判断するような処理の実装不要となります。
メッセージボックスの種類
最後に、Tkinter で利用可能な7種類のメッセージボックスについて解説しておきます。
ここでは、各メッセージボックスの見た目、表示する関数、関数の返却値、関数の default
引数への指定可能な値について解説していきます。default
引数の意味合いについては 引数の指定 で説明していますので、忘れてしまった方は 引数の指定 を参照してください。
また、各関数の返却値の解説においては、閉じるボタンが押下された時の返却値についても説明しています。ですが、Mac の場合はメッセージボックスに閉じるボタン自体が存在しないため、Mac ユーザーの方は、閉じるボタンに関する説明は読み飛ばしていただければ良いと思います。
情報通知用メッセージボックス
では、各メッセージボックスについて説明していきます。
最初に、情報通知用メッセージボックスの説明を行います。
情報通知用メッセージボックスの見た目
まず、情報通知用メッセージボックスの見た目は、下の図のようになります。
情報通知用メッセージボックスを表示する関数
情報通知用メッセージボックスの表示関数は showinfo
となります。
showinfo
関数の返却値
showinfo
関数の返却値は、押下されたボタンに関わらず 'ok'
となります。
押下されたボタン | 返却値 |
OK ボタン |
'ok' |
閉じるボタン | 'ok' |
showinfo
関数の default
引数に指定可能な値
showinfo
関数の default
引数に指定可能な値は 'ok'
のみとなります。showinfo
関数の default
引数の初期値に関しても 'ok'
となりますので、showinfo
関数への default
引数の指定は不要ということになります。
スポンサーリンク
エラー通知用メッセージボックス
2つ目に、エラー通知用メッセージボックスの説明を行います。
エラー通知用メッセージボックスの見た目
まず、エラー通知用メッセージボックスの見た目は、下の図のようになります。
エラー通知用メッセージボックスを表示する関数
エラー通知用メッセージボックスの表示関数は showerror
となります。
showerror
関数の返却値
showerror
関数の返却値は、押下されたボタンに関わらず 'ok'
となります。
押下されたボタン | 返却値 |
OK ボタン |
'ok' |
閉じるボタン | 'ok' |
showerror
関数の default
引数に指定可能な値
showerror
関数の default
引数に指定可能な値は 'ok'
のみとなります。showerror
関数の default
引数の初期値に関しても 'ok'
となりますので、showerror
関数への default
引数の指定は不要ということになります。
警告通知用メッセージボックス
3つ目に、警告通知用メッセージボックスの説明を行います。
警告通知用メッセージボックスの見た目
まず、警告通知用メッセージボックスの見た目は、下の図のようになります。
警告通知用メッセージボックスを表示する関数
警告通知用メッセージボックスの表示関数は showwarning
となります。
showwarning
関数の返却値
showwarning
関数の返却値は、押下されたボタンに関わらず 'ok'
となります。
押下されたボタン | 返却値 |
OK ボタン |
'ok' |
閉じるボタン | 'ok' |
showwarning
関数の default
引数に指定可能な値
showwarning
関数の default
引数に指定可能な値は 'ok'
のみとなります。showwarning
関数の default
引数の初期値に関しても 'ok'
となりますので、showwarning
関数への default
引数の指定は不要ということになります。
OK
/ キャンセル
選択用メッセージボックス
4つ目に、OK
/ キャンセル
選択用メッセージボックスの説明を行います。
OK
/ キャンセル
選択用メッセージボックスの見た目
まず、OK
/ キャンセル
選択用メッセージボックスの見た目は、下の図のようになります。
OK
/ キャンセル
選択用メッセージボックスを表示する関数
OK
/ キャンセル
選択用メッセージボックスの表示関数は askokcancel
となります。
askokcancel
関数の返却値
askokcancel
関数の返却値は、押下されたボタンに応じて変化します。具体的には、押下されたボタンに応じて下記の値が返却されることになります。
押下されたボタン | 返却値 |
OK ボタン |
True |
キャンセル ボタン |
False |
閉じるボタン | False |
Tkinter のメッセージボックスでは、閉じるボタンは キャンセル
ボタンと同じくキャンセルを意味するボタンとなります。なので、返却値に関しても、閉じるボタン押下時と キャンセル
ボタン押下時とで同じ値となります。
askokcancel
関数の default
引数に指定可能な値
askokcancel
関数の default
引数に指定可能な値は 'ok'
と 'cancel'
となります。また、askokcancel
関数の default
引数の初期値は 'ok'
です。
スポンサーリンク
はい
/ いいえ
選択用メッセージボックス
5つ目に、はい
/ いいえ
選択用メッセージボックスの説明を行います。
はい
/ いいえ
選択用メッセージボックスの見た目
まず、はい
/ いいえ
選択用メッセージボックスの見た目は、下の図のようになります。
はい
/ いいえ
選択用メッセージボックスを表示する関数
はい
/ いいえ
選択用メッセージボックスの表示関数は下記の2つとなります。これらの2つは返却値は異なりますが、表示されるメッセージボックスの見た目等は全く同じなので、返却値が扱いやすい方を選択して利用すればよいです。
askyesno
関数askquestion
関数
askyesno
関数の返却値 / askquestion
関数の返却値
askyesno
関数は、押下されたボタンに応じて下記の値を返却します。
押下されたボタン | 返却値 |
はい ボタン |
True |
いいえ ボタン |
False |
閉じるボタン | - |
それに対し、askquestion
関数は、押下されたボタンに応じて下記の値を返却します。
押下されたボタン | 返却値 |
はい ボタン |
'yes' |
いいえ ボタン |
'no' |
閉じるボタン | - |
このように、askyesno
関数と askquestion
関数とでは、返却値が異なります。この返却値の違いを考慮して、どちらの関数を実行するのかを決めればよいのですが、おそらく、他の関数とも返却値が似ている askyesno
関数の方が使いやすいのではないかと思います。
また、Tkinter のメッセージボックスでは、閉じるボタンは キャンセル
ボタンと同じくキャンセルを意味するボタンとなります。ですが、はい
/ いいえ
選択用メッセージボックスには キャンセル
ボタンが存在せずキャンセス操作が不可なので、閉じるボタンもクリックできないようになっています。
askyesno
と askquestion
の default
引数に指定可能な値
askyesno
関数と askquestion
関数ともに、default
引数に指定可能な値は 'yes'
と 'no'
となります。また、これらの関数の default
引数の初期値は 'ok'
です。
再試行
/ キャンセル
選択用メッセージボックス
6つ目に、再試行
/ キャンセル
選択用メッセージボックスの説明を行います。
再試行
/ キャンセル
選択用メッセージボックスの見た目
まず、再試行
/ キャンセル
選択用メッセージボックスの見た目は、下の図のようになります。
再試行
/ キャンセル
選択用メッセージボックスを表示する関数
再試行
/ キャンセル
選択用メッセージボックスの表示関数は askretrycancel
となります。
askretrycancel
関数の返却値
askretrycancel
関数の返却値は、押下されたボタンに応じて変化します。具体的には、押下されたボタンに応じて下記の値が返却されることになります。
押下されたボタン | 返却値 |
再試行 ボタン |
True |
キャンセル ボタン |
False |
閉じるボタン | False |
Tkinter のメッセージボックスでは、閉じるボタンは キャンセル
ボタンと同じくキャンセルを意味するボタンとなります。なので、返却値に関しても、閉じるボタン押下時と キャンセル
ボタン押下時とで同じ値となります。
askretrycancel
関数の default
引数に指定可能な値
askretrycancel
関数の default
引数に指定可能な値は 'retry'
と 'cancel'
となります。また、askretrycancel
関数の default
引数の初期値は 'retry'
です。
はい
/ いいえ
/ キャンセル
選択用メッセージボックス
最後に、はい
/ いいえ
/ キャンセル
選択用メッセージボックスの説明を行います。
はい
/ いいえ
/ キャンセル
選択用メッセージボックスの見た目
まず、はい
/ いいえ
/ キャンセル
選択用メッセージボックスの見た目は、下の図のようになります。
はい
/ いいえ
/ キャンセル
選択用メッセージボックスを表示する関数
はい
/ いいえ
/ キャンセル
選択用メッセージボックスの表示関数は askyesnocancel
となります。
askyesnocancel
関数の返却値
askyesnocancel
関数の返却値は、押下されたボタンに応じて変化します。具体的には、押下されたボタンに応じて下記の値が返却されることになります。
押下されたボタン | 返却値 |
はい ボタン |
True |
いいえ ボタン |
False |
キャンセル ボタン |
None |
閉じるボタン | None |
Tkinter のメッセージボックスでは、閉じるボタンは キャンセル
ボタンと同じくキャンセルを意味するボタンとなります。なので、返却値に関しても、閉じるボタン押下時と キャンセル
ボタン押下時とで同じ値となります。
askyesnocancel
関数の default
引数に指定可能な値
askyesnocancel
関数の default
引数に指定可能な値は 'yes'
と 'no'
と 'cancel'
となります。また、askyesnocancel
関数の default
引数の初期値は 'yes'
です。
スポンサーリンク
まとめ
このページでは、Tkinter のメッセージボックスの使い方について解説しました!
メッセージボックスは、Tkinter の messagebox
モジュールから提供される下記の8つの関数を実行することで表示することが可能です。
showinfo
:情報通知用メッセージボックスの表示showerror
:エラー通知用メッセージボックスの表示showwarning
:警告通知用メッセージボックスの表示askokcancel
:OK
/キャンセル
選択用メッセージボックスの表示askyesno
:はい
/いいえ
選択用メッセージボックスの表示askquestion
:はい
/いいえ
選択用メッセージボックスの表示askretrycancel
:再試行
/キャンセル
選択用メッセージボックスの表示askyesnocancel
:はい
/いいえ
/キャンセル
選択用メッセージボックスの表示
実際には、利用可能なメッセージボックスには7つ存在しますので、用途や目的に応じて使い分けていただければと思います。メッセージボックスを表示したくなる場面も多いと思いますので、是非このページで学んだことを活用してください!