【Python】Tkinterで入力式計算ツールを作ってみた | プログラミング
前回は、Tkinterで作ったウィンドウに計算問題と式を表示するプログラムを作成しましたが、プログラム内で入力した式と答えが表示されるだけという、あまりにも味気ないものになってしまいました。
myroad.hatenablog.com
そこで、今回はテキストエリアに数字を入力して、ボタンをクリックすると答えが表示されるという前回から一気に進化した計算ツールの作成に挑戦しました。作り終えるまでにかなりの時間と労力を費やしましたが、何とか自分がやりたいことが形になったので達成感は半端ないですね。
TkinterのEntryで入力した値の取得が難しい
まず作成した完成形ツールがこちらです。
前回は、TkinterのLabelというウィジェット(GUIのパーツ)使って、数式と答えを表示させましたが、今回は足し算する数値を入力するフォームと結果が表示されるフォーム、結果を表示するボタンを作成するウィジェットを使用しました。
また、今回のツールを作成するにあたって必要となった知識が関数
の知識です。関数は書籍でもだいぶ後の方に出てくる内容だったので、先に学習すべき部分を飛ばして関数を勉強しました。関数を勉強した率直な感想は、『いろいろな処理をまとめることができ、使いたいときに呼び出して何度でも使える汎用性の高さが素晴らしい!だけど難しい…』です。関数は書き方が以下のように、書き方が決まっています。
使用するときは、
開発に入る前の学習でだいぶ時間を費やしましたが、何とか書ききったコードがこちらです。
#! /usr/bin/env python import tkinter # ↓ボタンクリック時に実行される関数 def Calculation(): val_1 = int(num_area_1.get()) val_2 = int(num_area_2.get()) answer = val_1 + val_2 answer_ent.delete(0, tkinter.END) answer_ent.insert(0, answer) # ↓ベースとなるGUIの作成 root = tkinter.Tk() # ↓GUIのタイトル root.title(u'Pythonで足し算') # ↓GUIのサイズ root.geometry('320x100') # ↓GUI上にプラス演算子を表示するラベル plus_label = tkinter.Label(master=root, text='+', font=20) plus_label.place(x=135, y=20) # ↓テキストエリア作成,計算問題を入力する num_area_1 = tkinter.Entry(master=root, width=5, font=20) num_area_1.place(x=60, y=20) # ↓テキストエリア作成,計算問題を入力する num_area_2 = tkinter.Entry(master=root, width=5, font=20) num_area_2.place(x=180, y=20) # ↓ボタン作成,クリックで計算処理を実行する answer_btn = tkinter.Button(master=root, text='Answer', command=Calculation) answer_btn.place(x=240, y=20) # ↓計算結果が表示されるラベル answer_ent = tkinter.Entry(master=root, width=5, font=20) answer_ent.place(x=60, y=60) root.mainloop()
ツールを完成させるにあたって一番時間がかかったのが、入力した数値を関数に渡すところです。
num_area_1 = tkinter.Entry(master=root, width=5, font=20)
が一つ目の数値が入力されるフォームですが、num_area_1
変数に数値が入力されるので、関数内でnum_area_1
を使用したら格納された状態だと思ったのですが、実行してもエラーが表示されるし、どこが間違っているのかさっぱりでした。何度見ても分からないことは、あまり悩みすぎず検索することが解決の早道ですね。Tkinter Entry 値 取得
で検索すると、あっさり答えが分かりました。あんなに悩んでいた時間はなんだったのか…
Entry
から値を取得するには、 Entry名称 + .get()
と記述しないといけないみたいですね。
num_area_1.get()
これで、ようやく前に進むことができました。
あと、今回はウィジェットの位置指定にplace
を使用しました。pack
だと思うような位置に配置できなかったので…place
はウィンドウの左上を起点に(x , y)で指定できるので、個人的に調整がしやすかったです。フォームとフォームの間に「+」をラベルで表示することも簡単でした。
まとめ
今回初めて関数を使用して、本当に便利なものだと感じたので、使いこなせるようにもっと勉強頑張っていきたいですね。
次は、今回作成したプログラムを発展させて、もう少し色々な計算ができるツールにしたいと思います。