tkinterでシンプル電卓(Python 3.6.2 &Windows)

前回の記事の続きです。

今まではコンソールアプリケーション(Python Shellやコマンドプロンプト)としてPythonを動かしてきましたが、GUI(グラフィカ...

組み込み関数eval

eval(文字列)を使うと、引数の文字列をPythonの式として解析します。
例えば、文字列の”1+1″をevalの引数にしますと、下のようになります。

このevalを使用して簡単な電卓を作成してみます。

簡単な電卓のコード

作り方は色々あると思いますが、最低限の機能を持った電卓はこんな感じでしょうか?
ボタンを押すと数字や演算子が「+」で文字列連結され、「=」イコールを押すと先程の文字列をevalの引数にして計算するというものです。

4行目、8行目、12行目に関数を作りました。ボタンを押したら、それぞれの関数を呼び出しています。

35行目の赤い部分のcommand=の部分で関数を呼びます。
btn_7 = Button(root, text=”7″, command=lambda: func(“7”), width=5, height=2)
引数が必要な関数の場合、command=の後にlambda式でlambda: func(“7”)と書きます。これはfunc関数に文字列の7を引数にして渡すということです。

77行目のように、引数の必要ない関数を呼ぶには、command=clearとします(関数の最後の”()”はいりません)。これはbtn_cを押すとclear関数を呼ぶという意味です。

28行目のStringVar()は、ウィジェットに変数を関連づけるクラスです。
文字列ならStringVar、数値ならIntVar、浮動小数点ならDoubleVar、ブール型ならBooleanVarを使います。
今回は文字列で使うのでStringVar()を使います。StringVar()のオブジェクトをvar1としました。

31行目のLabelのオプションでtextvariable=var1としています。
textvariableは、StringVarをラベルに関連付けます。変数が変更されると、ラベルテキストが更新されます。

4行目の関数のfuncは、数字のボタンと「+」「-」「*」「/」のボタンで呼びます。
5行目のvar1.set(var1.get() + v)ですが、var1.get()はStringVarに入っている値を取得しています。最初は空です。var1.setはStringVarに値を代入しています。文字列の足し算なので例えば”5″+”5″でも10ではなくて、”55″になります。

8行目のclear関数は、77行目のボタンを押すと呼ばれます。
9行目のvar1.set(“”)は、空の文字列をStringVarに代入しています。

12行目のresult関数は、80行目のボタンが押されると呼ばれます。
14行目のvar1.set(eval(var1.get()))ですが、先程説明したevalが登場します。
evalでvar1.get()の文字列を解析して、その結果をvar1.setしています。
この時、var1.get()の文字列によってはエラーが出ますので、try~exceptで囲んでいます。
考えられるエラーはSyntaxError、ZeroDivisionError、NameErrorなので、書いておきました。

小数点もない不便な電卓ですが、この程度ならば簡単に作成できます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする