
まくまく
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 使い方まとめ