【Python】Tkinterを使って自作UIを作成しよう2【ボタン実装編】

プログラミングのKnow-howを共有しましょう

【Python】Tkinterを使って自作UIを作成しよう2【ボタン実装編】

スポンサーリンク

Pythonのライブラリ「Tkinter」を活用してウィンドウ画面にボタンを追加し、その機能を実装していきたいと思います。Tkinterのボタン実装について興味がある方はぜひご覧ください。

今回はPythonのTkinterというライブラリを使ってUIを含んだプログラムを作成していきたいと思います。
基本編のため凝ったことはしないので、Tkinterに興味を持っている方はぜひご覧ください。

この記事シリーズではPythonのTkinterというライブラリの基本的な使い方を紹介していきます。
Tkinterのウィンドウ作成等は前回の記事で解説しているので、興味があればそちらもぜひご覧ください。

その中でも今回は、

Tkinterで作成されたウィンドウにボタンを追加し、機能を実装する方法

を解説していきます。

それでは早速ソースを見ていきましょう。

Tkinterを使ってボタンを追加する

ウィンドウ作成のための処理(root)については以前の記事で解説したので、今回はボタンに関するコードのみを見ていきましょう。

ここではtkinter.Buttonクラスのインスタンスを作成しています。引数には左からroot(ボタンを表示する親ウィンドウ)、text(ボタンに表示するテキスト)を渡しています。この他にも様々なオプションがありますが、数が多いためここではよく使いそうなものを絞って紹介します。

anchor ボタン内のテキストの位置を指定します。n(北)、ne(北東)、e(東)、se(南東)、s(南)、sw(南西)、w(西)、nw(北西)、center(中心)が指定できます。デフォルトはcenterです。anchor=”center”のように指定します。
background/bg ボタンの背景色を指定します。background(bg)=”#FF00FF”ように指定します。
borderwidth ボタンの枠線の太さを指定します。デフォルトは2です。borderwidth=2のように指定します。
command ボタンが押された時に呼び出される関数、またはメソッドを指定します。このオプションについては後ほど詳しく実装していきます。
font ボタン内のテキストのフォントを指定します。これはTkinterのFontクラスで定義されたものを指定します、詳しくは前回までの記事をご覧ください。
height ボタンの高さを指定します。
width ボタンの幅を指定します。
padx ボタン内のテキストと、ボタンの枠までの横の余白を指定します。
pady ボタン内のテキストと、ボタンの枠までの縦の余白を指定します。
justify ボタン内のテキストが複数行あった場合、その揃え方を指定します。left、right、centerの値が指定できます。
image ボタンに表示する画像を指定します。指定するとテキスト等のオプションよりも優先されて表示されます。

これらは実際に使ってみながら覚えていきましょう。
※MacOSの場合は指定しても反映されないオプションが存在するみたいです。

この記述でボタンをウィンドウに配置しています。ボタンがウィンドウの中心に配置されるようにオプションを設定しています。

さて、この状態でプログラムを実行するとボタンが配置されたウィンドウが表示されます。ボタンを押した後の処理は実装していないので、押しても何も起こりません。次はその処理を実装していきましょう。

ボタンに機能を追加する

ソースは以下のようになります。このプログラムは、ボタンを押すたびにボタン内の数字がカウントアップする動作をします。

前回から追加した記述について詳しくていきましょう。

ボタン内テキストのカウントアップを管理するクラスです。ここで注目していただきたいのは最後の行、

です。ここでボタン内テキストをカウントアップされた数字に更新しています。button[“text”]という書き方は、ボタンを定義するときに使用するtextオプションと同様の意味を持ちます。定義した後に変更したい場合はこのように記述します。

commandオプションは上記の通り、ボタンが押された時の挙動を定義するオプションです。ここではCounterクラスのcount_upメソッドを指定しています。こうすることで、ボタンを押すとボタン内の数字がカウントアップする処理が実装できます。

まとめ

これでTkinterを用いたボタン配置、ボタンの昨日実装が可能になったと思います。

次回は入力欄の実装を解説していきたいと思います。

ここまで読んでいただきありがとうございます。
よろしければ他の記事も読んでみてください。