首页 > 脚本专栏 > python > python tkinter 计算器

python 基于 tkinter 做个学生版的计算器

作者:顾木子吖

这篇文章主要介绍了基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

九月初家里的熊孩子终于开始上学了!

半个月过去了,小孩子每周都会带着一堆的数学作业回来,哈哈哈哈~真好,在家做作业就没时间打扰我写代码了。

很赞,鹅鹅鹅饿鹅鹅鹅~曲项向天歌~~~~开心到原地起飞。

孩子昨天回家之后吃完饭就悄咪咪的说,神神秘秘的我以为做什么?结果是班主任让他们每个人带一个计算器,平常做数学算数的时候可以在家用用,嗯哼~这还用卖嘛?

立马给孩子用Python制作了一款简直一摸一样的学生计算器~

本文的学生计算器是基于tkinter做的界面化的小程序哈!

math模块中定义了一些数学函数。由于这个模块属于编译系统自带,因此它可以被无条件调用。

都是自带的所以不用安装可以直接使用。

​定义各种运算,设置显示框字节等:

oot = tkinter.Tk() root.resizable(width=False, height=False) '''hypeparameter''' # 是否按下了运算符 IS_CALC = False # 存储数字 STORAGE = [] # 显示框最多显示多少个字符 MAXSHOWLEN = 18 # 当前显示的数字 CurrentShow = tkinter.StringVar() CurrentShow.set('0') '''按下数字键(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': result = 1 / float(CurrentShow.get()) except: result = 'illegal operation' result = modifyResult(result) CurrentShow.set(result) IS_CALC = True elif operator == 'sqrt': 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) 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) result = eval(expression) # 除以0的情况 except: result = 'illegal operation' result = modifyResult(result) CurrentShow.set(result) STORAGE.clear() IS_CALC = True

学生计算器的文本布局界面:

def Demo(): root.minsize(320, 420) root.title('学生计算器') # --文本框 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()

效果如下:

​​ ​​

好啦!学生计算器就写完啦,简单不~记得三连哦,嘿嘿。

到此这篇关于python 基于 tkinter 做个学生版的计算器的文章就介绍到这了,更多相关python tkinter 计算器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • Python Pandas工具绘制数据图使用教程
    Python Pandas工具绘制数据图使用教程
    2021-12-12
  • Python OpenCV实战之与机器学习的碰撞
    Python OpenCV实战之与机器学习的碰撞
    2021-12-12
  • Python利用Selenium实现自动观看学习通视频
    Python利用Selenium实现自动观看学习通视频
    2021-12-12
  • Python批量修改文件名,文件再多也只要一秒
    Python批量修改文件名,文件再多也只要一秒
    2021-12-12
  • Python Pyqt5多线程更新UI代码实例(防止界面卡死)
    Python Pyqt5多线程更新UI代码实例(防止界面卡死)
    2021-12-12
  • 详解Python函数中的几种参数
    详解Python函数中的几种参数
    2021-12-12
  • Python解压可迭代对象赋值给多个变量详解
    Python解压可迭代对象赋值给多个变量详解
    2021-12-12
  • Python爬虫采集微博视频数据
    Python爬虫采集微博视频数据
    2021-12-12
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号