前言:
Python制作一个简单的计算器呗。
让我们愉快地开始吧~
开发工具
Python版本:3.6.4
相关模块:
python自带的tkinter和math模块即可。
环境搭建
安装Python并添加到环境变量即可。
原理简介
先利用tkinter搭建基本的计算器界面,这里就不详细说明了,请自行参考相关文档,如:
https://docs.python.org/zh-cn/3/library/tk.html
按键功能介绍如下:
0-9:数字键
.:小数点
+:加法
-:减法
*:乘法
/:除法
=:计算结果
1/x:取倒数
%:取余
del:退格键
CE:清空当前
C:清空所有
+/-:取反
sqrt:开根号
MC:将目前记忆的数字归零
MR:将当前计算出来的数字呈现出来
MS:无视目前记忆多少数字,直接以当前数字取代记忆中的数字
M+:记忆当前数字
M-:记忆当前数字(负数形式)
因为直接调用了math库和python的eval函数,所以功能实现起来很简单,这里主要讲几个实现过程中需要注意的细节。
(1)退格操作
显示框中只有一个数字的时候,使用退格键后应当使显示框显示数字0,而不是空。
(2)非法操作
把将0作为分母或对负数开根号等操作归入非法操作,避免程序抛出异常。
(3)设置当前显示字符最大长度
因为显示框长度有限,所以能显示的字符数量也有限,因此需要设置当前显示字符最大长度。比如用户不可以无限制地连续输入一连串数字,最终结果只能保留前多少位等等。
部分代码
- '''Demo'''
- def Demo():
- root.minsize(320, 420)
- root.title('Calculator')
- # 布局
- # --文本框
- label = tkinter.Label(root, textvariable=CurrentShow, bg='black', anchor='e', bd=5, fg='white', font=('楷体', 20))
- label.place(x=20, y=50, width=280, height=50)
- # --第一行
- # ----Memory clear
- button1_1 = tkinter.Button(text='MC', bg='#666', bd=2, command=lambda:pressOperator('MC'))
- button1_1.place(x=20, y=110, width=50, height=35)
- # ----Memory read
- button1_2 = tkinter.Button(text='MR', bg='#666', bd=2, command=lambda:pressOperator('MR'))
- button1_2.place(x=77.5, y=110, width=50, height=35)
- # ----Memory save
- button1_3 = tkinter.Button(text='MS', bg='#666', bd=2, command=lambda:pressOperator('MS'))
- button1_3.place(x=135, y=110, width=50, height=35)
- # ----Memory +
- button1_4 = tkinter.Button(text='M+', bg='#666', bd=2, command=lambda:pressOperator('M+'))
- button1_4.place(x=192.5, y=110, width=50, height=35)
- # ----Memory -
- button1_5 = tkinter.Button(text='M-', bg='#666', bd=2, command=lambda:pressOperator('M-'))
- button1_5.place(x=250, y=110, width=50, height=35)
- # --第二行
- # ----删除单个数字
- button2_1 = tkinter.Button(text='del', bg='#666', bd=2, command=lambda:delOne())
- button2_1.place(x=20, y=155, width=50, height=35)
- # ----清除当前显示框内所有数字
- button2_2 = tkinter.Button(text='CE', bg='#666', bd=2, command=lambda:clearCurrent())
- button2_2.place(x=77.5, y=155, width=50, height=35)
- # ----清零(相当于重启)
- button2_3 = tkinter.Button(text='C', bg='#666', bd=2, command=lambda:clearAll())
- button2_3.place(x=135, y=155, width=50, height=35)
- # ----取反
- button2_4 = tkinter.Button(text='+/-', bg='#666', bd=2, command=lambda:pressOperator('+/-'))
- button2_4.place(x=192.5, y=155, width=50, height=35)
- # ----开根号
- button2_5 = tkinter.Button(text='sqrt', bg='#666', bd=2, command=lambda:pressOperator('sqrt'))
- button2_5.place(x=250, y=155, width=50, height=35)
- # --第三行
- # ----7
- button3_1 = tkinter.Button(text='7', bg='#bbbbbb', bd=2, command=lambda:pressNumber('7'))
- button3_1.place(x=20, y=200, width=50, height=35)
- # ----8
- button3_2 = tkinter.Button(text='8', bg='#bbbbbb', bd=2, command=lambda:pressNumber('8'))
- button3_2.place(x=77.5, y=200, width=50, height=35)
- # ----9
- button3_3 = tkinter.Button(text='9', bg='#bbbbbb', bd=2, command=lambda:pressNumber('9'))
- button3_3.place(x=135, y=200, width=50, height=35)
- # ----除
- button3_4 = tkinter.Button(text='/', bg='#708069', bd=2, command=lambda:pressOperator('/'))
- button3_4.place(x=192.5, y=200, width=50, height=35)
- # ----取余
- button3_5 = tkinter.Button(text='%', bg='#708069', bd=2, command=lambda:pressOperator('%'))
- button3_5.place(x=250, y=200, width=50, height=35)
- # --第四行
- # ----4
- button4_1 = tkinter.Button(text='4', bg='#bbbbbb', bd=2, command=lambda:pressNumber('4'))
- button4_1.place(x=20, y=245, width=50, height=35)
- # ----5
- button4_2 = tkinter.Button(text='5', bg='#bbbbbb', bd=2, command=lambda:pressNumber('5'))
- button4_2.place(x=77.5, y=245, width=50, height=35)
- # ----6
- button4_3 = tkinter.Button(text='6', bg='#bbbbbb', bd=2, command=lambda:pressNumber('6'))
- button4_3.place(x=135, y=245, width=50, height=35)
- # ----乘
- button4_4 = tkinter.Button(text='*', bg='#708069', bd=2, command=lambda:pressOperator('*'))
- button4_4.place(x=192.5, y=245, width=50, height=35)
- # ----取导数
- button4_5 = tkinter.Button(text='1/x', bg='#708069', bd=2, command=lambda:pressOperator('1/x'))
- button4_5.place(x=250, y=245, width=50, height=35)
- # --第五行
- # ----3
- button5_1 = tkinter.Button(text='3', bg='#bbbbbb', bd=2, command=lambda:pressNumber('3'))
- button5_1.place(x=20, y=290, width=50, height=35)
- # ----2
- button5_2 = tkinter.Button(text='2', bg='#bbbbbb', bd=2, command=lambda:pressNumber('2'))
- button5_2.place(x=77.5, y=290, width=50, height=35)
- # ----1
- button5_3 = tkinter.Button(text='1', bg='#bbbbbb', bd=2, command=lambda:pressNumber('1'))
- button5_3.place(x=135, y=290, width=50, height=35)
- # ----减
- button5_4 = tkinter.Button(text='-', bg='#708069', bd=2, command=lambda:pressOperator('-'))
- button5_4.place(x=192.5, y=290, width=50, height=35)
- # ----等于
- button5_5 = tkinter.Button(text='=', bg='#708069', bd=2, command=lambda:pressOperator('='))
- button5_5.place(x=250, y=290, width=50, height=80)
- # --第六行
- # ----0
- button6_1 = tkinter.Button(text='0', bg='#bbbbbb', bd=2, command=lambda:pressNumber('0'))
- button6_1.place(x=20, y=335, width=107.5, height=35)
- # ----小数点
- button6_2 = tkinter.Button(text='.', bg='#bbbbbb', bd=2, command=lambda:pressDP())
- button6_2.place(x=135, y=335, width=50, height=35)
- # ----加
- button6_3 = tkinter.Button(text='+', bg='#708069', bd=2, command=lambda:pressOperator('+'))
- button6_3.place(x=192.5, y=335, width=50, height=35)
- root.mainloop()
-
-
- if __name__ == '__main__':
- Demo()
文章到这vb.net教程里就结束了,感谢c#教程你的观看,下篇python教程文章分享Turtle库制作简易时钟
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。