はじめに
Pythonのkivyを使って電卓を作ってみた。まずは、基本の電卓。
kivyで使ったウィジェット
今回kivyで使ったウィジェットは ButtonとTextInput。kivyについては(記事:PythonのGUIライブラリKivyを使う)を参照。
作成したコード
ボタンを押すと、self.calc
にデータがたまっていき、[=]ボタンを押されたときに、eval()
で計算結果を出力する。kivyで作ったので、Androidアプリ化も可能( 記事:PythonでAndroidアプリを作る。)。
basic_calc.py
from kivy.app import App
from kivy.lang import Builder
#kivy GUI
Layout = Builder.load_string('''
#計算ボタン
BoxLayout:
orientation:'vertical'
CalTxt:
size_hint_y:0.4
id:txt_calc
text:''
GridLayout:
size_hint_y:0.6
cols:4
#------------------------
SymBtn:
id:btn_reserved1
text:''
SymBtn:
id:btn_reserved2
text:''
SymBtn:
id:btn_reserved3
text:''
SymBtn:
id:btn_clear
text:'C'
#------------------------
SymBtn:
id:btn_left_bracket
text:'('
SymBtn:
id:btn_right_bracket
text:')'
SymBtn:
id:btn_del
text:'DEL'
SymBtn:
id:btn_div
text:'/'
#------------------------
SymBtn:
id:btn_7
text:'7'
SymBtn:
id:btn_8
text:'8'
SymBtn:
id:btn_9
text:'9'
SymBtn:
id:btn_times
text:'*'
#------------------------
SymBtn:
id:btn_4
text:'4'
SymBtn:
id:btn_5
text:'5'
SymBtn:
id:btn_6
text:'6'
SymBtn:
id:btn_minus
text:'-'
#------------------------
SymBtn:
id:btn_1
text:'1'
SymBtn:
id:btn_2
text:'2'
SymBtn:
id:btn_3
text:'3'
SymBtn:
id:btn_plus
text:'+'
#------------------------
SymBtn:
id:btn_0
text:'0'
SymBtn:
id:btn_00
text:'00'
SymBtn:
id:btn_comma
text:'.'
SymBtn:
id:btn_equal
text:'='
#部品=================================
<SymBtn@Button>:
font_size:30
background_color:(0,1,0,1)
on_press:app.btn_on('symbol', self.text)
<CalTxt@TextInput>:
font_size:100
''')
#--------------------
# 計算アプリ
#--------------------
class Calc_app(App):
#Global
calc=''
#----------------------
# Kivy初期化
#----------------------
def build(self):
self.title = 'Calc_app'
return Layout
#----------------------
# Kivy終了
#----------------------
def on_stop(self):
pass
#----------------------
# btn_on()
#----------------------
def btn_on(self,btn_type, btn_id):
if btn_id == '=':
try:
#計算に不要の文字は削除
self.calc = self.calc.replace('Error','')
self.calc = self.calc.replace(',','')
#計算
self.calc = eval(self.calc)
self.calc = f'{self.calc:,}'
except:
#計算異常時はError
self.calc='Error'
elif btn_id == 'C':
#文字すべて削除
self.calc=''
elif btn_id == 'DEL':
#文字を一文字削除
self.calc=self.calc[:-1]
else:
#文字を後ろに追記
self.calc+=btn_id
#文字をテキストエリアに出力
self.root.ids.txt_calc.text = self.calc
if __name__ == '__main__':
Calc_app().run()
以上