Python kivy 計算式を直接入力する電卓アプリ eval関数

まくまく
まくまく
PythonのGUIアプリ作成ライブラリ kivyを使用して”電卓っぽいアプリ”を作成しようと思います。

以前、tkinterでも同様のものを作りました。今回はそれのkivyバージョンです。

前回の記事はこちら>>>Python tkinter 文字列を計算式にするeval関数を使ってみた

tkinterに比べて、モダンなデザインにできるのもkivyの良いところですね。

出力


プログラムを実行するとこのようなウインドウが立ち上がります。

グリッドレイアウトで、テキストインプット、ボタン、ラベルを表示しました。




テキストインプットに直接計算式を入力して「Enter」ボタンを押すと、下段のラベルに答えが表示されます。


四則演算に対応しています。


テキストインプットに「=」が入力されると、「符号は必要ありません」というメッセージを表示しました。


計算の順番も問題ありません。


括弧にも対応しています。


小数点にも対応。答えが小数点になる場合は、小数点第3位まで表示するようにしました。


計算に関係ない記号などが入力されるとエラーで落ちます。

サンプルプログラム

pyファイル

#ライブラリのインポート
from kivy.app import App
from kivy.config import Config
from kivy.uix.widget import Widget
from kivy.lang import Builder

#ウインドウの幅と高さの設定
Config.set('graphics', 'width', 700)
Config.set('graphics', 'height', 200)
#1でサイズ変更可、0はサイズ変更不可
Config.set('graphics', 'resizable', 1)

Builder.load_file("eval.kv")

class MyLayout(Widget):
    def button_enter(self):
        formula = self.ids.calc_input.text

        if "=" in str(formula):
            self.ids.calc_answer.text = "No Need Equal Sign"
        else:
            answer = eval(formula)
            if "." in str(answer):
                answer = f"{answer:.3f}"
            else:
                pass
            self.ids.calc_answer.text = str(answer)

    def button_clear(self):
        self.ids.calc_input.text = ""
        self.ids.calc_answer.text = ""
        
class EvalkivyApp(App):
    def build(self):
        self.title = "eval app"
        return MyLayout()

if __name__ == '__main__':
    EvalkivyApp().run()

kvファイル

#ファイル名: eval.kv
<MyLayout>
    GridLayout:
        cols: 3
        rows: 2
        size: root.width, root.height
        padding: 30
        spacing: 20

        TextInput:
            id: calc_input
            multiline: False
            font_size: 32
            size_hint: (3, 1)
            
        Button:
            text: "Enter"
            font_size: 32
            size_hint: (1, 1)
            background_normal: ""
            #RGBA
            background_color: (255/255,136/255,17/255,1)
            on_press: root.button_enter()

        Button:
            text: "Clear"
            font_size: 32
            size_hint: (1, 1)
            background_normal: ""
            #RGBA
            background_color: (255/255,136/255,17/255,1)
            on_press: root.button_clear()

        Label:
            id: calc_answer
            text: "Answer"
            font_size: 32
            size_hint: (1, 1)  

kivy関連の記事はこちらにまとめています。>>>Python kivy 使い方まとめ

タイトルとURLをコピーしました