1
1

Kivyで基本の電卓を作ってみた

Last updated at Posted at 2023-12-10

はじめに

Pythonのkivyを使って電卓を作ってみた。まずは、基本の電卓。

image.png

kivyで使ったウィジェット

今回kivyで使ったウィジェットは ButtonTextInput。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()

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1