前言 本片文章是Python实现一个计算器的小程序
涉及到了tkinter 的一个使用和掌握
大家要不是很懂tkinter 的话可以看看下面这个视频!
Python超全tkinter案例讲解,基础教学视频!!
相关文件 想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复计算器
Python源码、问题解答学习交流群:773162165
开发环境 Python版本:3.6.7
相关模块:
math
tkinter
以及一些python自带的模块 。
环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可 。
效果展示
代码实现 模块导入
import mathimport tkinter 按钮功能实现
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() 按下数字键(0-9)
def pressNumber(number): global IS_CALC if IS_CALC:CurrentShow.set('0')IS_CALC = False if CurrentShow.get() == '0':CurrentShow.set(number) else:if len(CurrentShow.get()) < MAXSHOWLEN:CurrentShow.set(CurrentShow.get() + number) 按下小数点
def pressDP(): global IS_CALC if IS_CALC:CurrentShow.set('0')IS_CALC = False if len(CurrentShow.get().split('.')) == 1:if len(CurrentShow.get()) < MAXSHOWLEN:CurrentShow.set(CurrentShow.get() + '.') 清零
def clearAll(): global STORAGE global IS_CALC STORAGE.clear() IS_CALC = False CurrentShow.set('0') 清除当前显示框内所有数字
def clearCurrent(): CurrentShow.set('0') 删除显示框内最后一个数字
def delOne(): global IS_CALC if IS_CALC:CurrentShow.set('0')IS_CALC = False if CurrentShow.get() != '0':if len(CurrentShow.get()) > 1:CurrentShow.set(CurrentShow.get()[:-1])else:CurrentShow.set('0') 计算答案修正
def modifyResult(result): result = str(result) if len(result) > MAXSHOWLEN:if len(result.split('.')[0]) > MAXSHOWLEN:result = 'Overflow'else:# 直接舍去不考虑四舍五入问题result = result[:MAXSHOWLEN] return result 按下运算符
def pressOperator(operator): global STORAGE global IS_CALC if operator == '+/-':if CurrentShow.get().startswith('-'):CurrentShow.set(CurrentShow.get()[1:])else:CurrentShow.set('-'+CurrentShow.get()) elif operator == '1/x':try:result = 1 / float(CurrentShow.get())except:result = 'illegal operation'result = modifyResult(result)CurrentShow.set(result)IS_CALC = True elif operator == 'sqrt':try:result = math.sqrt(float(CurrentShow.get()))except:result = 'illegal operation'result = modifyResult(result)CurrentShow.set(result)IS_CALC = True elif operator == 'MC':STORAGE.clear() elif operator == 'MR':if IS_CALC:CurrentShow.set('0')STORAGE.append(CurrentShow.get())expression = ''.join(STORAGE)try:result = eval(expression)except:result = 'illegal operation'result = modifyResult(result)CurrentShow.set(result)IS_CALC = True elif operator == 'MS':STORAGE.clear()STORAGE.append(CurrentShow.get()) elif operator == 'M+':STORAGE.append(CurrentShow.get()) elif operator == 'M-':if CurrentShow.get().startswith('-'):STORAGE.append(CurrentShow.get())else:STORAGE.append('-' + CurrentShow.get()) elif operator in ['+', '-', '*', '/', '%']:STORAGE.append(CurrentShow.get())STORAGE.append(operator)IS_CALC = True elif operator == '=':if IS_CALC:CurrentShow.set('0')STORAGE.append(CurrentShow.get())expression = ''.join(STORAGE)try:result = eval(expression)# 除以0的情况except:result = 'illegal operation'result = modifyResult(result)CurrentShow.set(result)STORAGE.clear()IS_CALC = True 【【Python工具】Python实现一个计算器小工具,刚刚学习Python的小伙伴用来练习还是不错的】好啦具体的一个代码实现过程就是这个样子的啦,有些小伙伴要是需要源码的话可以在公众号里面回复计算器,大体来说功能的实现也不是很难,有啥问题都可以过来找我就好啦!
公众号【Python日志】
需要源码的小伙伴可以在公众号回复计算器
Python源码、问题解答学习交流群:773162165
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
