Python, tkinter で簡単なGUIアプリを作ってみる
ここではPythonのGUIを操作できるライブラリ tkinter で簡単なGUIアプリを作ってみます。実行すると、GUIで2つの値を入力しボタンを押すと計算結果を表示する簡単な計算機ができます。
例えばこんな方にお薦め
- Pythonでアプリを作ってみたい
- Pythonでどんなことができるか知りたい
使用するソースコード
以下の公開リポジトリに置いています。
https://github.com/sunset-create/calculator
コードの解説
解説には下記のコードを使います。
import tkinter def btn_click(): num = int(txt.get()) num2 = int(txt2.get()) global n1, n2 n1 = num n2 = num2 root.destroy() def btn_click2(): root.destroy() root = tkinter.Tk() root.geometry('1000x400') root.title('計算機') lbl = tkinter.Label(text='計算する値を入力してください') lbl.place(x=10, y=30) lbl = tkinter.Label(text='A') lbl.place(x=30, y=70) txt = tkinter.Entry(width=50) txt.place(x=90, y=70) lbl2 = tkinter.Label(text='B') lbl2.place(x=30, y=110) txt2 = tkinter.Entry(width=50) txt2.place(x=90, y=110) btn = tkinter.Button(root, text='計算', command=btn_click) btn.place(x=140, y=170) root.mainloop() root = tkinter.Tk() root.geometry('200x400') lbl = tkinter.Label(text='入力された値は A= ' + str(n1) + ', B =' + str(n2) + ' です') lbl.place(x=10, y=10) lbl = tkinter.Label(text='A + B = ' + str(n1 + n2) + ' です') lbl.place(x=10, y=40) lbl = tkinter.Label(text='A - B = ' + str(n1 - n2) + ' です') lbl.place(x=10, y=60) lbl = tkinter.Label(text='A * B = ' + str(n1 * n2) + ' です') lbl.place(x=10, y=80) lbl = tkinter.Label(text='A / B = ' + str(n1 / n2) + ' です') lbl.place(x=10, y=100) lbl = tkinter.Label(text='A % B = ' + str(n1 % n2) + ' です') lbl.place(x=10, y=120) btn = tkinter.Button(root, text='終了', command=btn_click2) btn.place(x=40, y=150) root.mainloop()
コードの解説をしていきます。
import tkinter
tkinterをインポートします。tkinterはGUIを操作することができるライブラリです。
def btn_click(): num = int(txt.get()) num2 = int(txt2.get()) global n1, n2 n1 = num n2 = num2 root.destroy()
1つ目のボタンを関数定義します。1つ目の数値をnum, 2つ目の数値をnum2に整数型で格納します。この関数外で参照したいため、n1, n2はグローバル関数に指定します。テキストボックスに入力された2つの変数をn1, n2に取得し入力画面を閉じるのに使用します。
def btn_click2(): root.destroy()
2つ目のボタンを関数定義します。計算結果を表示したウィンドウを閉じる際のボタンに使用します。
root = tkinter.Tk() root.geometry('1000x400') root.title('計算機')
最初に表示される計算機の大枠をtkinterを使って作成します。root.geometry()でサイズを指定しています。root.title()でタイトルに表示されるテキストを入力します。今回は'計算機'と表示させます。
lbl = tkinter.Label(text='計算する値を入力してください') lbl.place(x=10, y=30) lbl = tkinter.Label(text='A') lbl.place(x=30, y=70) txt = tkinter.Entry(width=50) txt.place(x=90, y=70) lbl2 = tkinter.Label(text='B') lbl2.place(x=30, y=110) txt2 = tkinter.Entry(width=50) txt2.place(x=90, y=110)
GUI内にテキストと2つの数値を入力するためのエントリーを作成しています。tkinter.Label()でテキストをラベルへ代入し、そのラベルをx,y座標で配置します。tkinter.Entry()で数値を入力するためのエントリーを作成します。エントリーもラベルと同様x,y座標で配置します。
btn = tkinter.Button(root, text='計算', command=btn_click) btn.place(x=140, y=170)
計算を実行するためのボタンを配置します。ボタンの機能は先に定義したbtn_click関数を割り当てます。ボタンを押すとbtn_click関数で定義されたように2つのエントリーから数値を回収し、GUIウィンドウを閉じる動作を行います。このボタンについても、x,y座標で配置指示します。
root.mainloop()
ここまでが、rootで定義されたGUIであることを示しています。
root = tkinter.Tk() root.geometry('200x400') lbl = tkinter.Label(text='入力された値は A= ' + str(n1) + ', B =' + str(n2) + ' です') lbl.place(x=10, y=10) lbl = tkinter.Label(text='A + B = ' + str(n1 + n2) + ' です') lbl.place(x=10, y=40) lbl = tkinter.Label(text='A - B = ' + str(n1 - n2) + ' です') lbl.place(x=10, y=60) lbl = tkinter.Label(text='A * B = ' + str(n1 * n2) + ' です') lbl.place(x=10, y=80) lbl = tkinter.Label(text='A / B = ' + str(n1 / n2) + ' です') lbl.place(x=10, y=100) lbl = tkinter.Label(text='A % B = ' + str(n1 % n2) + ' です') lbl.place(x=10, y=120) btn = tkinter.Button(root, text='終了', command=btn_click2) btn.place(x=40, y=150) root.mainloop()
計算結果の画面を表示します。再びtkinterでGUI画面を表示し、その画面内に先ほど取得した2つの数値の計算結果を表示しています。btnにはbtn_click2関数を割り当てて、ボタンを押すとGUIを終了するようにしています。
今回は、Python, tkinterを使って計算機のGUIアプリを作成してみました。tkinterを使えば、Pythonでアプリを作成することも可能ですね。