python代码编写计算器小程序


Posted in Python onMarch 30, 2020

本文实例为大家分享了python计算器小程序的具体代码,供大家参考,具体内容如下

import tkinter
import tkinter.messagebox
import math
class JSQ:


 def __init__(self):
 #创建主界面
 self.root = tkinter.Tk()
 self.root.minsize(270, 330)
 self.root.maxsize(270, 330)
 self.root.title('小可乐的计算器')
 #定义一个变量赋值给页面label
 self.result = tkinter.StringVar()
 #界面先显示个0
 self.result.set(0)
 # 设置一个全局变量 运算数字和符号的列表
 self.lists = []
 # 添加一个判断是否按下运算符号的标志
 self.isPressSign = False
 # 添加一个判断是否运算完毕的标志,如果运算完毕在获取数字的方法中会清空上一轮运算结果
 self.islistsclear = False
 # 添加一个判断百分号是否使用的功能
 self.isbaifenhao = False
 # 为了下面的百分号方法使用(在百分号中为按下运算符号之后的数字)
 self.num1 = ''
 # 定义一个全局变量(获取百分好的结果)为了在‘='运算的时候输出
 self.result3 = None
 # 获取运算符号之前的数字
 self.num = ''
 # 获取运算符号给百分好方法使用
 self.sign1 = ''
 self.layout()
 self.menubar()
 #将窗口一直显示
 self.root.mainloop()

 def menubar(self):
 # 创建总菜单
 allmenu = tkinter.Menu(self.root)
 # 创建子菜单
 filemenu = tkinter.Menu(allmenu, tearoff=0)
 # 在子菜单里添加文件
 filemenu.add_command(label='标准型(T) Alt+1',command = lambda : self.func2())
 filemenu.add_command(label='科学性(S) Alt+2',command = lambda : self.func2())
 filemenu.add_command(label='程序员(p) Alt+3',command = lambda : self.func2())
 filemenu.add_command(label='统计信息(A) Alt+4',command = lambda : self.func2())
 # 创建分割线
 filemenu.add_separator()
 filemenu.add_command(label='历史记录(Y) Ctrl+H',command = lambda : self.func2())
 filemenu.add_command(label='数学分组(I)',command = lambda : self.func2())
 filemenu.add_separator()
 filemenu.add_command(label='基本(B) Ctrl+F4',command = lambda : self.func2())
 filemenu.add_command(label='单位转换(U) Ctrl+U',command = lambda : self.func2())
 filemenu.add_command(label='日期计算(D) Ctrl+E',command = lambda : self.func2())
 # 在子菜单里再创建一个菜单
 filemenunei = tkinter.Menu(filemenu, tearoff=0)
 # 在子菜单里的菜单添加文件
 filemenunei.add_command(label='抵押(M)',command = lambda : self.func2())
 filemenunei.add_command(label='汽车租赁(V)',command = lambda : self.func2())
 filemenunei.add_command(label='油耗(mpg)(F)',command = lambda : self.func2())
 filemenunei.add_command(label='油耗(1/100km)(U)',command = lambda : self.func2())
 # 将子菜单里的菜单添加到子菜单里
 filemenu.add_cascade(label='工作表(W)', menu=filemenunei)
 # 添加退出功能
 filemenu.add_command(label='退出', command=self.root.quit)
 # 将子菜单添加到总菜单里
 allmenu.add_cascade(label='查看(V)', menu=filemenu)
 # 再创建一个子菜单
 editmenu = tkinter.Menu(allmenu, tearoff=0)
 # 在子菜单里添加文件
 editmenu.add_command(label='复制(C)',command = lambda : self.func2())
 editmenu.add_command(label='粘贴(P)',command = lambda : self.func2())
 # 创建分割线
 editmenu.add_separator()
 # 在子菜单里创建一个菜单
 editmenunei = tkinter.Menu(editmenu, tearoff=0)
 # 在子菜单里的菜单添加文件
 editmenunei.add_command(label='复制历史记录(I)', stat='disable')
 editmenunei.add_command(label='编辑(E) F2', stat='disable')
 editmenunei.add_command(label='取消编辑(N) Esc', stat='disable')
 editmenunei.add_command(label='清除(L) Ctrl+Shift+D', stat='disable')
 # 将子菜单里的菜单添加到子菜单
 editmenu.add_cascade(label='历史记录(H)', menu=editmenunei)
 # 将子菜单添加到总菜单
 allmenu.add_cascade(label='编辑(E)', menu=editmenu)
 # 创建第三个子菜单
 helpmenu = tkinter.Menu(allmenu, tearoff=0)
 # 在第三个子菜单里添加文件
 helpmenu.add_command(label='查看帮助(v) F1',command = lambda : self.func2())
 # 创建分割线
 helpmenu.add_separator()
 helpmenu.add_command(label='关于计算器(A)',command = lambda : self.func2())
 # 将第三个子菜单添加到总菜单中
 allmenu.add_cascade(label='帮助(H)', menu=helpmenu)
 # 将总菜单布局到主窗口
 self.root.config(menu=allmenu)

 # 下面代码用于页面布局
 def layout(self):
 #显示结果的标签
 label = tkinter.Label(self.root, textvariable=self.result, bg='white', font=('黑体', 10), anchor='e')
 label.place(x=20, y=10, width=230, height=30)

 btnmc = tkinter.Button(self.root, text='MC',command = lambda : self.func2())
 btnmc.place(x=20, y=50, width=30, height=30)

 btnmr = tkinter.Button(self.root, text='MR',command = lambda : self.func2())
 btnmr.place(x=70, y=50, width=30, height=30)

 btnms = tkinter.Button(self.root, text='MS',command = lambda : self.func2())
 btnms.place(x=120, y=50, width=30, height=30)

 btnmjia = tkinter.Button(self.root, text='M+',command = lambda : self.func2())
 btnmjia.place(x=170, y=50, width=30, height=30)

 btnmjian = tkinter.Button(self.root, text='M-',command = lambda : self.func2())
 btnmjian.place(x=220, y=50, width=30, height=30)

 btnjiantou = tkinter.Button(self.root, text='←', command=lambda: self.jiantou())
 btnjiantou.place(x=20, y=90, width=30, height=30)

 btnce = tkinter.Button(self.root, text='CE', command=lambda: self.CE())
 btnce.place(x=70, y=90, width=30, height=30)

 btnc = tkinter.Button(self.root, text='C', command=lambda: self.clears())
 btnc.place(x=120, y=90, width=30, height=30)

 btnzhengfu = tkinter.Button(self.root, text='±', command=lambda: self.zhenffu())
 btnzhengfu.place(x=170, y=90, width=30, height=30)

 btnkaigen = tkinter.Button(self.root, text='√', command=lambda: self.sqrts())
 btnkaigen.place(x=220, y=90, width=30, height=30)

 btn7 = tkinter.Button(self.root, text='7', command=lambda: self.pressNum('7'))
 btn7.place(x=20, y=130, width=30, height=30)

 btn8 = tkinter.Button(self.root, text='8', command=lambda: self.pressNum('8'))
 btn8.place(x=70, y=130, width=30, height=30)

 btn9 = tkinter.Button(self.root, text='9', command=lambda: self.pressNum('9'))
 btn9.place(x=120, y=130, width=30, height=30)

 btnchu = tkinter.Button(self.root, text='/', command=lambda: self.pressCompute('/'))
 btnchu.place(x=170, y=130, width=30, height=30)

 btnbaifen = tkinter.Button(self.root, text='%', command=lambda: self.baifenhao())
 btnbaifen.place(x=220, y=130, width=30, height=30)

 btn4 = tkinter.Button(self.root, text='4', command=lambda: self.pressNum('4'))
 btn4.place(x=20, y=170, width=30, height=30)

 btn5 = tkinter.Button(self.root, text='5', command=lambda: self.pressNum('5'))
 btn5.place(x=70, y=170, width=30, height=30)

 btn6 = tkinter.Button(self.root, text='6', command=lambda: self.pressNum('6'))
 btn6.place(x=120, y=170, width=30, height=30)

 btncheng = tkinter.Button(self.root, text='*', command=lambda: self.pressCompute('*'))
 btncheng.place(x=170, y=170, width=30, height=30)

 btnfenshu = tkinter.Button(self.root, text='1/X', command=lambda: self.fenshu())
 btnfenshu.place(x=220, y=170, width=30, height=30)

 btn1 = tkinter.Button(self.root, text='1', command=lambda: self.pressNum('1'))
 btn1.place(x=20, y=210, width=30, height=30)

 btn2 = tkinter.Button(self.root, text='2', command=lambda: self.pressNum('2'))
 btn2.place(x=70, y=210, width=30, height=30)

 btn3 = tkinter.Button(self.root, text='3', command=lambda: self.pressNum('3'))
 btn3.place(x=120, y=210, width=30, height=30)

 btnjian = tkinter.Button(self.root, text='-', command=lambda: self.pressCompute('-'))
 btnjian.place(x=170, y=210, width=30, height=30)

 btndenghao = tkinter.Button(self.root, text='=', command=lambda: self.pressEqual())
 btndenghao.place(x=220, y=210, width=30, height=70)

 btn0 = tkinter.Button(self.root, text='0', command=lambda: self.pressNum('0'))
 btn0.place(x=20, y=250, width=80, height=30)

 btndian = tkinter.Button(self.root, text='.', command=lambda: self.pressNum('.'))
 btndian.place(x=120, y=250, width=30, height=30)

 btnjia = tkinter.Button(self.root, text='+', command=lambda: self.pressCompute('+'))
 btnjia.place(x=170, y=250, width=30, height=30)

 # 数字函数(获取数字的函数)
 def pressNum(self,num):
 # 下面的百分好会用到
 self.num1 = num
 # 判断是否按下运算符号
 if self.isPressSign == False:
  pass
 #如果按下运算符号界面归0
 else:
  self.result.set(0)
  self.isPressSign = False
 # 判断运算是否完毕
 if self.islistsclear == False:
  # 获取面板上原有的数字
  oldNum = self.result.get()
  # 判断原有数字是否为零
  if oldNum == '0':
  #将传入的数字显示
  self.result.set(num)
  else:
  #原来的数字加上现在输入的数字
  newNum = oldNum + num
  self.result.set(newNum)
 # 运算完毕界面自动清空
 else:
  # lists.clear()#如果添加这行代码就不能在上一轮运算结果的基础上运算了
  self.result.set('0')
  self.islistsclear = False
  self.result.set(num)

 # 运算操作(获取运算符号然后将数字和符号添加到列表中)
 def pressCompute(self,sign):
 # 获取界面上的数字
 if True:
  #获取输入运算符之前的数字
  self.num = self.result.get()
  #将数字加入列表之中
  self.lists.append(self.num)
  #将运算符加入到列表之中
  self.lists.append(sign)
  #将运算符赋值给sign1(下面的百分号方法会用到)
  self.sign1 = sign
  #将是否按下运算符号标志改成True
  self.isPressSign = True
 # 在刚开始的时候添加一个负号(-)用于正负好转换使用
 #如果列表第一位为0
 if self.lists[0] == '0':
  #如果列表第二位为‘-'
  if self.lists[1] == '-':
  self.result.set('-')
  # 设置运算符号的状态
  self.isPressSign = False

 # 获取运算结果(将列表内的值转换为字符串,然后将字符串用python代码执行)
 def pressEqual(self):
 # 获取当前页面的数字
 curnum = self.result.get()
 self.lists.append(curnum)
 #将列表中的数据转换为字符串
 computeStr = ''.join(self.lists)
 #将字符串用python代码执行
 endNum = eval(computeStr)
 #界面显示结果
 self.result.set(endNum)
 #如果百分号标志触发
 if self.isbaifenhao == True:
  #界面显示self.result3
  self.result.set(self.result3)
 #运算结束后将列表清空
 self.lists.clear()
 #将运算标志改成True
 self.islistsclear = True

 # 清空运算
 def clears(self):
 self.lists.clear()
 self.result.set('0')

 # 删除上一位数字
 def CE(self):
 self.result.set('0')

 # 用于更改数的正负值
 def zhenffu(self):
 self.result1 = self.result.get()
 self.result.set(float(self.result1) * (-1))
 self.islistsclear = True

 # 用于开平方运算
 def sqrts(self):
 result1 = self.result.get()
 self.result.set(math.sqrt(float(result1)))
 self.lists.clear()
 self.islistsclear = True

 # 用于求x/9的值
 def fenshu(self):
 result1 = self.result.get()
 self.result.set(1 / float(result1))
 self.islistsclear = True

 #用于求百分号功能的方法
 def baifenhao(self):
 listss = []
 # 判断如果输入一个数没输运算符号的话界面自动归零
 if len(self.lists) < 1:
  self.result.set(0)
 else:
  #获取输入运算符号之前的数字
  a1 = float(self.num)
  #获取运算符号
  a2 = self.sign1

  #再次获取输入运算符号之前的数字
  a3 = float(self.num)

  a4 = '*'
  #算出最后一个数字的百分数
  a6 = float(self.num1) / 100

  #算出百分号的那个结果
  resultmuqian = a3 * a6
  #总结果
  resultbai = str(a1) + a2 + str(a3) + a4 + str(a6)
  #将字符串用python代码执行
  self.result3 = eval(resultbai)
  #在界面上按下%符号是显示的结果
  self.result.set(resultmuqian)
  #改变百分号的标志
  self.isbaifenhao = True

 #箭头的意义删除后一位数字
 def jiantou(self):
 result1 = self.result.get()
 result1 = list(result1)
 del result1[-1]
 result1 = str(result1)
 self.result.set(result1)

 def func2(self):
 tkinter.messagebox.askokcancel(title = '略过',message='没实现')


myjsq = JSQ()

好了,以上便是利用Python代码实现一个计算器小程序的过程。

更多计算器功能实现,请点击专题: 计算器功能汇总 进行学习

关于Android计算器功能的实现,查看专题:Android计算器 进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python中is和id的用法
Apr 03 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
python中的编码知识整理汇总
Jan 26 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
python 详解turtle画爱心代码
Feb 15 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 #Python
Python Django的安装配置教程图文详解
Jul 17 #Python
python按键按住不放持续响应的实例代码
Jul 17 #Python
python数据预处理之数据标准化的几种处理方式
Jul 17 #Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 #Python
python小程序实现刷票功能详解
Jul 17 #Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 #Python
You might like
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php格式化日期实例分析
2014/11/12 PHP
PHP安全上传图片的方法
2015/03/21 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
关于Python作用域自学总结
2019/06/10 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
师范应届生求职信
2013/11/15 职场文书
销售工作岗位职责
2013/12/24 职场文书
员工生日活动方案
2014/08/24 职场文书
2014最新实习证明模板
2014/10/02 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
商务司机岗位职责
2015/04/10 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
python opencv通过按键采集图片源码
2021/05/20 Python