
まくまく
文字列を計算式にするeval関数を使ってみました。エントリーボックスに「1+1」と入力して実行すると「2」という答えを返してくれる関数です。Pythonの電卓GUIアプリなどでもよく見る関数ですね。
出力
プログラムを実行するとこのようなウインドウが立ち上がります。上段に計算式、下段にはその計算結果を表示するようにしました。
前回の記事「Python tkinter クラスを用いてフレームやエントリーボックス、ラベル、ボタンなどを表示する方法」で記載したプログラムの一部を変更しただけです。手続き型で書くと、もっとシンプルにできると思います。
上段に計算式を入力して、「計算実行」のボタンを押すと、
下段のエントリーボックスとラベルに計算結果が表示されました。
※結果を2箇所に表示しているのは特に意味はありません。
掛け算、割り算も計算できます。
組み合わせもOKです。計算の順番も問題ありませんね。
括弧にも対応しています。
数値以外が入るとエラーとなります。
サンプルプログラム
#ライブラリのインポート
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master.geometry("500x200+50+50")
self.master.title("eval 計算テスト")
#フレームの作成
self.frame1 = tk.Frame(self.master, width=480, height=70, padx=10, pady=10, bg="#E6E6E6")
self.frame1.grid_propagate(False)
self.frame1.place(x=10, y=10)
self.frame2 = tk.Frame(self.master, width=480, height=100, padx=10, pady=10, bg="#E6E6E6")
self.frame2.grid_propagate(False)
self.frame2.place(x=10, y=90)
#ウィジェット作成
self.create_widgets()
def create_widgets(self):
#入力用
self.label1 = tk.Label(self.frame1, text="計算式を入力")
self.label1.grid(row=0, column=0, sticky=tk.W)
self.entry1 = tk.Entry(self.frame1, width=30)
self.entry1.grid(row=1, column=0, sticky=tk.W)
self.button = tk.Button(self.frame1, text="計算実行")
self.button.grid(row=1, column=1)
self.button.bind("", self.click_button)
#貼り付け先
self.label2 = tk.Label(self.frame2, text="計算結果")
self.label2.grid(row=0, column=0, sticky=tk.W)
self.entry2 = tk.Entry(self.frame2, width=30)
self.entry2.grid(row=1, column=0, sticky=tk.W)
self.text = tk.StringVar()
self.label = tk.Label(self.frame2, textvariable=self.text)
self.label.grid(row=2, column=0, sticky=tk.W, pady=5)
def click_button(self, event):
en_get = self.entry1.get()
self.entry2.delete("0", "end")
self.text.set("")
ans = eval(en_get)
self.entry2.insert(0, ans)
self.text.set(ans)
def main():
root = tk.Tk()
root.resizable(width=False, height=False)
app = Application(master=root)
app.mainloop()
if __name__ == "__main__":
main()
Python tkinterについてはこちらの記事でまとめています。>>>Python tkinter 使い方まとめ