IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第22回 tkinterで使えるmessageboxでメッセージを表示させてみよう (菱沼佑香) 2021年7月

こんにちは、吉政創成 菱沼です。

今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

さて、ヒット&ブローのプログラムが完成したため、画面作りに入りました。画面作りにはtkinterというPythonの標準GUIツールキットを使用していきます。

ここ数回ほど、tkinterで使えるウィジェットやその配置方法、フォントや文字などの見た目を変える方法をまとめてきました。

今回はユーザーが入力した後に押すボタンの挙動について学びます。

前回のおさらい

tkinterでは、ウィジェットごとにフォントや文字色などを設定することが可能ですが、同じフォントを毎度設定するのは面倒なので、それをまとめて行うこともできます。以下の画像は前回までに学んだ内容を反映してみたもので、ラベルで使用したいフォントだけを指定してみました(ここでは一つだけなのであまり意味を成していませんが…)。

それ以外の変更点はウィジェットの配置位置や、サイズ、ボタンの見た目です。

fig01

フォントを指定する際、オプションの付け方には決まりがあり、【フォント名、フォントサイズ、太字、斜体、下線、取消線】という並びで指定しなくてはいけません。省略することはできますが、前後するとエラーが起きますので注意が必要です。と言ったことを実験と共にまとめました。

ボタンを押した時の動きはdef関数で設定する

さて、上の画像を見てわかる通りチェックボタンがありますが、いまのところ、このボタンを押しても何も起きないので、ボタンを押した時に起きる動作を設定してあげる必要があります。それにはdef関数を使うそうです。

def関数と言えば、以前学習した関数を自作したいときに使う関数ですが、ここではチェックボタンを押した時の動作を作るのに使うようです。

―――――――――引用―――――――――

P.167

①クリックされたときに実行する関数を作る

まずは、ボタンがクリックされたときに実行する関数を作ります。たとえば、次のようなButtonClickという名前の関数を作ります。

>>> def ButtonClick()

>>>    …ここに好きな処理を書く…

②ボタンがクリックされあっときに①の関数を実行するように結びつける

次に①で作った関数を、ボタンがクリックされたときに実行するように結びつけます。それには、ボタンを作るときのButtonメソッドに「command=関数名」という引数を追加します。つまり、①のようにButtonClickという関数を実行したいのなら、次のように記述します。

>>> button1 = tk.Button(root, text = “”, font=(“Helvetica”, 14), command=ButtonClick)

すると結び付けられ、クリックされたときに、「ButtonClick」という関数が実行されるようになります。

(中略)

「クリックされたときに、あらかじめ作っておいた関数を実行するように結びつける」というように、「動作」と「実行するプログラム」を結び付けるプログラミング手法を「イベントドリブン(event-driven)」と言います。

「イベント」というのは「動作」や「事象」のことで、「何か事象が起きた」ことを示します。ここでの「クリック」は、代表的なイベントの1つです。

――――――――――――――――――――

ということで、まずはボタンを押した時にメッセージを表示することから始めてみます。

―――――――――引用―――――――――

メッセージを表示するには「tkinter」の「messagebox」というパッケージに含まれる関数を使います。まず、次のように記述して、「tkinter.messagebox」を読み込みます。「messagebox」という名前は長いので、ここでは「as」を使って、「tmsg」という名前で参照できるようにしました。(略)

>>>import tkinter.messagebox  as tmsg

(中略)ここでは、情報を表示するためのshowinfo関数を使ってメッセージを表示してみたいと思います。

>>> tmsg.showinfo(“タイトル”, “表示したい文字”)

そこで、ButtonClick関数を次のように定義します。

>>> def ButtonClick():

>>>    tmsg.showinfo(“テスト”, “クリックされたよ”)

(中略)

実際に実行すると、ボタンをクリックしたときに、「テスト」というタイトルで「クリックされたよ」というメッセージが表示されます。

――――――――――――――――――――

そうしてできたコードと、実行結果が次の画像です。(サンプルコードより。)

fig02

ここではshowinfoが使われていますが、他にもメッセージを表示させる関数はあるそうで、それぞれアイコンが異なります。それが次の画像です。画像の下に関数を書いておきました。

fig03

そして、OKとかキャンセルとか、意思を確認したりする画面が表示されることありますよね?

そのためのメッセージボックスもありました。

ask~から始まるもので数種類あります。書き方はshowinfoと同じように「tmsg.ask●●●(“テスト”, “クリックされたよ”)」と記述します。

出てくるのは次のような画面で、それぞれの画面のタイトルを関数名にしています。

fig04

以下のページでmessageboxについてまとめられていましたので、はい/いいえを選択した後の戻り値など、より詳しく知りたい方はご参照下さい。

tkinter.messagebox【メッセージボックス】

【Python】メッセージボックスを表示する(tkinter.messagebox)|鎖プログラム

イベントドリブンと機能と値を引き渡すこと

ところで、先ほどの引用で、イベントドリブンという言葉が出てきました。動作とプログラムを結び付けるプログラミング手法ということですが、これに関連する話として、以前、プログラムを作るなら機能を分割して考え、どのようにつなげるか(モジュールを作るか)、どのようにすれば値を引き渡せるかといったことを考えると良いというお話を伺ったことがあります。

その考えに基づいてこのヒット&ブローを機能に分けて考えてみると、

  • 数字を入力するテキストボックスとチェックボタンがある画面という機能
  • プログラムを動かすきっかけとなる値を引き渡す機能
  • ②で渡された値とランダムな4桁の数字をチェックし、完全に一致するまで繰り返す機能

ざっくりかもしれませんが上のように分割できるのだと思います。(③についてはすでに作成したプログラムがありますのでここでは細かく分解しません)

つまり、②は①と③をくっつけてあげるための機能なので、この部分がイベントドリブンということですね。イメージとしては次の図のような感じで、この3つの機能があることで、ヒット&ブローというゲームができるというように理解しています。

fig05

②で行われる、値の引き渡し方をどのようにするのかを考えていかなくてはならないようです。

次回はこの部分について学習していく予定です。

今回もお付き合い頂きありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes