【Python/Tkinter】メッセージボックスの使い方

メッセージボックスの使い方の解説ページアイキャッチ

このページにはプロモーションが含まれています

このページでは、Python でのメッセージボックスの使い方について解説していきます。

メッセージボックスとは

まずは、メッセージボックスについて簡単に説明しておきます。

メッセージボックス

メッセージボックスとは、下の図のような、ユーザーに対して何らかの情報を通知したり、ユーザーに対して何らかの判断・選択を依頼したりするウィンドウのことを言います。メッセージボックスは、アプリとは別のウィンドウをポップアップで表示されることが多いです。

メッセージボックスの説明図

こういったメッセージボックスは、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 を事前に行ったり、ユーザーの選択結果に応じて条件分岐を行うようにしてやれば良いだけです。

messageboximport する

まず、メッセージボックスの表示は Tkinter の messagebox から提供される機能となりますので、この messageboximport を行う必要があります。この  import は、下記によって実施することができます。

messageboxのimport
from tkinter import messagebox

メッセージボックスの表示関数を実行する

messageboximport すれば、後は messagebox で定義されているメッセージボックスの表示関数を実行するだけで、メッセージボックスが画面上に表示されるようになります。めちゃめちゃ簡単ですね!

メッセージボックスの選択

ただ、messagebox には8つのメッセージボックスの表示関数が定義されていますので、用途目的に応じて実行する関数を選択する必要があります。

MEMO

前述の通り、Tkinter で利用可能なメッセージボックスの種類は7つです

それに対し、メッセージボックスの表示関数としては8つのものが定義されています

後述で解説するように、askyesnoaskquestion に関しては同じメッセージボックスを表する関数となりますので、関数としては8つ存在しますが、利用可能なメッセージボックスの種類は7つとなります

前述でも説明したように、メッセージボックスには、通知用のメッセージボックスと選択用のメッセージボックスの2種類のものが存在します。

まず、通知用のメッセージボックスの表示関数としては、下記の3つが定義されています。

  • showinfo:情報通知用メッセージボックスの表示
  • showerror:エラー通知用メッセージボックスの表示
  • showwarning:警告通知用メッセージボックスの表示

また、選択用のメッセージボックスの表示関数としては、下記の5つが定義されています。

  • askokcancelOK / キャンセル 選択用メッセージボックスの表示
  • askyesnoはい / いいえ 選択用メッセージボックスの表示
  • askquestionはい / いいえ 選択用メッセージボックスの表示
  • askretrycancel再試行 / キャンセル 選択用メッセージボックスの表示
  • askyesnocancelはい / いいえ / キャンセル 選択用メッセージボックスの表示

だいたい関数名を見れば、表示されるメッセージボックスがどんなものであるかは想像がつくと思います。各メッセージボックスの具体的な見た目等については メッセージボックスの種類 で解説を行います。

askyesnoaskquestion に関しては、実行して表示されるメッセージボックスは同じであり、両方ともはい / いいえ 選択用メッセージボックスの表示を行う関数となります。ただし、これらの関数では返却値が異なります。この返却値の違いに関しても、メッセージボックスの種類 で解説を行います。

引数の指定

また、メッセージボックスは、メッセージを表示して「ユーザーに通知する」 or 「ユーザーに判断して選択してもらう」ことを目的に利用されることになります。

なので、メッセージボックスにはメッセージの表示が必要で、この表示するメッセージはメッセージボックス表示関数の message 引数で指定可能です。message 引数に指定する文字列に改行文字を含ませることで、明示的に改行することも可能です。

また、Windows の場合は、メッセージボックスのタイトルも設定可能で、このタイトルは title 引数で指定可能です。

title引数とmessage引数の説明図

Windows の場合は、これらの message 引数と title 引数が、Mac の場合は message 引数が、メッセージボックスの表示関数に指定が必須となる引数と考えて良いと思います。別に指定しなくても例外やエラーが発生するわけではないですが、Windows の場合はメッセージやタイトルが空となりますし、Mac の場合はメッセージに 通知 と表示されるだけになるため、「ユーザーに通知する」・「ユーザーに判断して選択してもらう」というメッセージボックスの目的が果たせなくなります。

例えば、showerror でエラー通知用のメッセージボックスを表示するのであれば、下記のように引数を指定して showerror 関数を実行してやれば良いことになります。

メッセージボックスの表示
messagebox.showerror(
    title='エラー', # Windowsの場合のみ
    message='ユーザー名には数字は使用できません'
)

その他には、icon 引数もメッセージボックスの表示関数に指定可能です。icon 引数を指定することで、メッセージボックスに表示するアイコンを変更することが可能です。

icon引数の説明図

指定可能な値は下記の4つとなります。ただし、メッセージボックスの種類に応じて適切なアイコンが表示されるようになっているので、わざわざ icon 引数を指定する機会は少ないと思います。また、Mac の場合はアイコンが2つしか用意されていないので注意してください。

指定値 Windows Mac
'info' Windowsのアイコン1 Macのアイコン1
'error' Windowsのアイコン2 Macのアイコン1
'warning' Windowsのアイコン3 Macのアイコン2
'question' Windowsのアイコン4 Macのアイコン1

さらに、default 引数も指定することが可能で、この指定によってメッセージボックス表示時にフォーカスを当てておくボタンを変更することが可能です(フォーカスが当たっているボタンはエンターキー等の入力で押下操作を行うことが可能となります)。

フォーカスの説明図

この default 引数に指定可能な値はメッセージボックスの種類によって異なるため、メッセージボックスの種類 で別途説明を行います。また、default 引数の初期値は、肯定を意味するボタン(OKはい再試行)に対応する値となっています。

スポンサーリンク

押下されたボタンに応じた処理を行う

先ほど説明したように、メッセージボックスの表示関数が実行されればメッセージボックスが画面に表示されることになります。そして、これによってユーザーにメッセージを通知することができることになります。

通知用メッセージボックスの場合は、通知することが目的なので、基本的に関数の実行さえ行えば、メッセージボックスの表示で果たすべき目的が達成できることになります。

ただし、選択用メッセージボックスの場合は、ボタン押下によって、ユーザーからメッセージの内容に対する選択が行われることになります。そして、そのユーザーの選択を意味あるものにするためには、その押下されたボタンに応じて次に実行する処理を切り替えることが必要となります。

例えば、アプリの 閉じる ボタンがクリックされた時に、「本当にアプリを終了してよろしいですか?」というメッセージボックスを表示したとしましょう。ここでユーザーが はい ボタンを押下したときにも いいえ ボタンを押下したときにもアプリを終了する処理を実行してしまうと、メッセージボックスを表示した意味も、ユーザーに選択してもらった意味もないですよね…。

選択されたボタンに応じた処理の分岐の必要性を説明する図1

なので、このような場合であれば、はい ボタンが押下されたときのみアプリを終了する処理を行い、いいえ ボタンが押下された時には何も処理を行わないようにするような「処理の切り替え」が必要となります。

選択されたボタンに応じた処理の分岐の必要性を説明する図2

で、こういった押下されたボタンに応じた処理の切り替えを実施するためには、まずは押下されたボタンを判別する必要があります。

この、押下されたボタンの判別は、メッセージボックスの表示関数の返却値から実施することが可能です。メッセージボックスの表示関数からは、押下されたボタンに応じた値が返却されることになります。なので、これらの関数の返却値から押下されたボタンを判別することができ、それによって押下されたボタンに応じた処理の切り替えを実現することができることになります。

この具体的な返却値は関数によって異なるため、詳細は メッセージボックスの種類 で説明を行います。が、例外はあるものの、基本的には肯定的な意味のボタン(はい / 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 / キャンセル 選択用メッセージボックスを表示する関数

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 と askquestiondefault 引数に指定可能な値

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:警告通知用メッセージボックスの表示
  • askokcancelOK / キャンセル 選択用メッセージボックスの表示
  • askyesnoはい / いいえ 選択用メッセージボックスの表示
  • askquestionはい / いいえ 選択用メッセージボックスの表示
  • askretrycancel再試行 / キャンセル 選択用メッセージボックスの表示
  • askyesnocancelはい / いいえ / キャンセル 選択用メッセージボックスの表示

実際には、利用可能なメッセージボックスには7つ存在しますので、用途や目的に応じて使い分けていただければと思います。メッセージボックスを表示したくなる場面も多いと思いますので、是非このページで学んだことを活用してください!

同じカテゴリのページ一覧を表示