PythonのGUI ボタン(Button)のクリックイベントについて。
この記事の内容はコチラです
- ボタンをおしてクリックイベントを作る
- tkinterの使い方を知る
今回は、Pythonでボタンを作成し、ボタンのイベントを作成する方法を解説します。
ボタンのクリックイベントを取得する
Pythonではボタンをおしてクリックイベントを作ることができます。画面(ウィンドウ)を作ったり、ボタンを作ったり、GUIのアプリケーションを作成できます。
tkinter
PythonでGUIを操作するには、「tkinter」モジュールを使います。
「tkinter」は「Tool Kit Interface」のことで、Python標準のGUIアプリケーションを作成するモジュールです。
ボタンのイベント作成
# ボタンのクリックイベント def btn_click(): print('テスト')
import tkinter # 画面作成 tki = tkinter.Tk() tki.geometry('300x200') tki.title('ボタンイベントの検証') # ボタン作成 btn = tkinter.Button(tki, text='計算', command=btn_click) btn.place(x=140, y=170)
ボタンのイベントは関数化します。ここでは「btn_click」を用意しました。この中にイベントの処理を記述します。
ウィンドウを作成し、その中に計算ボタンを配置しました。ボタンは「tkinter.Button」で生成します。ボタンの名前は「text=」で指定し、イベントは「command=」で指定します。
ボタンがおされたら、「btn_click」関数を呼び出す処理を作成しました。
作成した画面
上のコードで作成したボタンつきの画面はこちらです。
ボタンのイベント処理全体
ここではボタンがクリックされたら、イベントで10進数を16進数へ変換して表示する画面を作成します。ボタンだけでなく、テキストボックスやラベルもふくめて画面全体を網羅してみます。
# クリックイベント def btn_click(): # テキスト取得 num = int(txt_1.get()) # 16進数へ変換してテキストボックスへセット txt_2.insert(0, hex(num))
ここではbtn_click関数に、10進数→16進数へ変換する処理を作成します。
10進数、16進数用のテキストボックスを2つ用意します(後述)。10進数のテキストボックスの値を 「txt_1.get()」で取得し、int型に変換します。
さらに「hex」で16進数に変換した値を「txt_2.insert」で16進数のテキストボックスへセットします。
これで関数は完成です。次はGUIの画面を作成します。
import tkinter # 画面作成 tki = tkinter.Tk() tki.geometry('300x200') tki.title('ボタンイベントの検証') # ラベル lbl_1 = tkinter.Label(text='10進数') lbl_1.place(x=30, y=70) lbl_2 = tkinter.Label(text='16進数') lbl_2.place(x=30, y=100) # テキストボックス txt_1 = tkinter.Entry(width=20) txt_1.place(x=90, y=70) txt_2 = tkinter.Entry(width=20) txt_2.place(x=90, y=100) # ボタン btn = tkinter.Button(tki, text='計算', command=btn_click) btn.place(x=140, y=170) # 画面をそのまま表示 tki.mainloop()
ボタンは「計算」ボタンを用意しました。「command=btn_click」でボタンがクリックされると、「btn_click」を実行します。
テキストボックスの詳細な使い方はこちらを参照してください。
作成した画面
こちらが実際に作成したGUIの画面です。計算ボタンをおすと、10進数で入力された数値を16進数に変換して表示することができました。
Pythonで「tkinter」を使ってボタンイベントを作成することができました。
参考ページ:https://docs.python.jp/3/library/tk.html
以上、Pythonで「tkinter」を使ってボタンイベントを作成する方法でした。
コメント
初心者にはとてもわかりやすく、為になります。
説明の手順、言い回しは一番わかりやすいものでした。
どうか続けて頂きたいです。
それはそれはありがとうございます。
更新が途中でとまってしまっていて申し訳ありません。
続きはそのうち書くつもりです(汗)
初心者ですが分かりやすかったです。
質問なんですが、最後のfrm.mainloop()
NameError: name’frm’is not defined
となってしまいます。
色々調べてみましたが分からないのでどうすればいいのか教えてください。
画面のオブジェクトなので「tki」が正解です。
記事を修正しました。
× frm.mainloop()
〇 tki.mainloop()
ご指摘ありがとうございました!