设为首页 收藏本站
查看: 1498|回复: 0

[经验分享] 基于python tkinter的简单计算器(v1.0)

[复制链接]

尚未签到

发表于 2018-8-13 08:17:28 | 显示全部楼层 |阅读模式
import tkinter  

  
#定义计算器类
  
class Calc:
  #初始化魔术方法
  def __init__(self):
  #初始化共用属性
  #定义一个用于存放被计算字符串的列表
  self.operationList = []
  

  #定义运算标记 确定是否输入了运算符号
  self.isOper = False
  

  #初始化界面
  self.initWindows()
  

  #更改按键盘颜色方法
  def changeBg(self,evt):
  evt.widget['bg'] = 'cyan'
  

  #恢复按键盘颜色方法
  def backBg(self,evt):
  evt.widget['bg'] = 'lightgray'
  

  #数字按钮操作方法
  def buttonAction(self,number):
  #判断用户是否按下了运算按钮
  if self.isOper == True:
  #在界面上显示运算符之后的数
  self.num.set(number)
  #运算标记复位
  self.isOper = False
  else:
  #没有铵下运算按钮
  #判断原始界面数字是否为0
  existNumber = self.num.get()
  if existNumber == '0':
  #如果界面中的初始数据为0 则获取用户输入数据并显示
  self.num.set(number)
  else:
  #如果界面中的初始数据不为0 则对字符进行累加
  self.num.set(self.num.get()+number)
  

  #运算按钮操作方法
  def operation(self,opFlag):
  #运算标记置为真
  self.isOper = True
  #获取界面中存在的数 并且写入列表
  self.operationList.append(self.num.get())
  #当前运算符号不会在上一步中写入 需要单独写入
  self.operationList.append(opFlag)
  #获取运行结果操作方法
  def getResult(self):
  #将当前界面中数字加入计算列表
  self.operationList.append(self.num.get())
  

  #开始计算
  result = eval(''.join(self.operationList))
  self.num.set(result)
  

  #全部清空重新计算方法
  def clearAll(self):
  #界面置0 计算列表置0
  self.num.set('0')
  self.operationList.clear()
  #运算标志复位
  self.isOper = False
  

  #实现退格键方法
  def backSpace(self):
  #获取当前显示数字长度
  strLength = len(self.num.get())
  #如果当前显示有数字
  if strLength > 1:
  #删除字串中最后一个字
  presentStr = self.num.get()
  presentStr = presentStr[:strLength - 1]
  self.num.set(presentStr)
  else:
  self.num.set('0')
  

  #正负号实现方法
  def pm(self):
  presentStr = self.num.get()
  #实现增加和去除负号
  if presentStr[0] == '-':
  self.num.set(presentStr[1:])
  #原始字串不得以-号和0开头
  elif presentStr[0] not in ('-','0'):
  self.num.set('-'+presentStr)
  

  #界面布局方法
  def initWindows(self):
  #生成主窗口 定制窗口尺寸
  root = tkinter.Tk()
  root.minsize(400,500)
  root.title('微硬计算器')
  

  #生成用于保存数值的变量
  self.num = tkinter.StringVar()
  self.num.set(0)
  

  #运算结果输出位置
  result = tkinter.Label(root,width=20,height=2,bg='white',bd=10,anchor='e',font=('宋体',50),textvariable=self.num)
  

  result.place(relx=0,rely=0,relwidth=1.0,relheight=0.4)
  

  ###########################以下为按键部分############################
  buttonCE = tkinter.Button(root,text='CE',bg='lightgray',command = self.clearAll)
  buttonCE.place(relx=0,rely=0.4,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonCE.bind('<Enter>',self.changeBg)
  buttonCE.bind('<Leave>',self.backBg)
  

  buttonC = tkinter.Button(root,text='C',bg='lightgray',command = self.clearAll)
  buttonC.place(relx=0.25,rely=0.4,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonC.bind('<Enter>',self.changeBg)
  buttonC.bind('<Leave>',self.backBg)
  

  buttonDel = tkinter.Button(root,text='<-',bg='lightgray',command = self.backSpace)
  buttonDel.place(relx=0.5,rely=0.4,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonDel.bind('<Enter>',self.changeBg)
  buttonDel.bind('<Leave>',self.backBg)
  

  buttonDiv = tkinter.Button(root,text='÷',bg='lightgray',command = lambda : self.operation('/'))
  buttonDiv.place(relx=0.75,rely=0.4,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonDiv.bind('<Enter>',self.changeBg)
  buttonDiv.bind('<Leave>',self.backBg)
  

  button1 = tkinter.Button(root,text='1',bg='lightgray',command = lambda : self.buttonAction('1'))
  button1.place(relx=0,rely=0.5,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button1.bind('<Enter>',self.changeBg)
  button1.bind('<Leave>',self.backBg)
  

  button2 = tkinter.Button(root,text='2',bg='lightgray',command = lambda : self.buttonAction('2'))
  button2.place(relx=0.25,rely=0.5,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button2.bind('<Enter>',self.changeBg)
  button2.bind('<Leave>',self.backBg)
  

  button3 = tkinter.Button(root,text='3',bg='lightgray',command = lambda : self.buttonAction('3'))
  button3.place(relx=0.5,rely=0.5,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button3.bind('<Enter>',self.changeBg)
  button3.bind('<Leave>',self.backBg)
  

  buttonX = tkinter.Button(root,text='x',bg='lightgray',command = lambda : self.operation('*'))
  buttonX.place(relx=0.75,rely=0.5,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonX.bind('<Enter>',self.changeBg)
  buttonX.bind('<Leave>',self.backBg)
  

  button4 = tkinter.Button(root,text='4',bg='lightgray',command = lambda : self.buttonAction('4'))
  button4.place(relx=0,rely=0.6,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button4.bind('<Enter>',self.changeBg)
  button4.bind('<Leave>',self.backBg)
  

  button5 = tkinter.Button(root,text='5',bg='lightgray',command = lambda : self.buttonAction('5'))
  button5.place(relx=0.25,rely=0.6,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button5.bind('<Enter>',self.changeBg)
  button5.bind('<Leave>',self.backBg)
  

  button6 = tkinter.Button(root,text='6',bg='lightgray',command = lambda : self.buttonAction('6'))
  button6.place(relx=0.5,rely=0.6,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button6.bind('<Enter>',self.changeBg)
  button6.bind('<Leave>',self.backBg)
  

  button_ = tkinter.Button(root,text='-',bg='lightgray',command = lambda : self.operation('-'))
  button_.place(relx=0.75,rely=0.6,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button_.bind('<Enter>',self.changeBg)
  button_.bind('<Leave>',self.backBg)
  

  button7 = tkinter.Button(root,text='7',bg='lightgray',command = lambda : self.buttonAction('7'))
  button7.place(relx=0,rely=0.7,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button7.bind('<Enter>',self.changeBg)
  button7.bind('<Leave>',self.backBg)
  

  button8 = tkinter.Button(root,text='8',bg='lightgray',command = lambda : self.buttonAction('8'))
  button8.place(relx=0.25,rely=0.7,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button8.bind('<Enter>',self.changeBg)
  button8.bind('<Leave>',self.backBg)
  

  button9 = tkinter.Button(root,text='9',bg='lightgray',command = lambda : self.buttonAction('9'))
  button9.place(relx=0.5,rely=0.7,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button9.bind('<Enter>',self.changeBg)
  button9.bind('<Leave>',self.backBg)
  

  buttonAdd = tkinter.Button(root,text='+',bg='lightgray',command = lambda : self.operation('+'))
  buttonAdd.place(relx=0.75,rely=0.7,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonAdd.bind('<Enter>',self.changeBg)
  buttonAdd.bind('<Leave>',self.backBg)
  

  buttonFlag = tkinter.Button(root,text='±',bg='lightgray',command = self.pm)
  buttonFlag.place(relx=0,rely=0.8,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonFlag.bind('<Enter>',self.changeBg)
  buttonFlag.bind('<Leave>',self.backBg)
  

  button0 = tkinter.Button(root,text='0',bg='lightgray',command = lambda : self.buttonAction('0'))
  button0.place(relx=0.25,rely=0.8,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  button0.bind('<Enter>',self.changeBg)
  button0.bind('<Leave>',self.backBg)
  

  buttonPoint = tkinter.Button(root,text='.',bg='lightgray',command = lambda : self.buttonAction('.'))
  buttonPoint.place(relx=0.5,rely=0.8,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonPoint.bind('<Enter>',self.changeBg)
  buttonPoint.bind('<Leave>',self.backBg)
  

  buttonEque = tkinter.Button(root,text='=',bg='lightgray',command = self.getResult)
  buttonEque.place(relx=0.75,rely=0.8,relwidth=0.25,relheight=0.1)
  #绑定按钮 生成鼠标经过变色效果
  buttonEque.bind('<Enter>',self.changeBg)
  buttonEque.bind('<Leave>',self.backBg)
  #########################以上为按键部分############################
  #底部显示信息
  bottomLabel = tkinter.Label(root,text = 'Power By Microhard Corpration\n@2017'
  ,bg='cyan',width=30,height = 1,padx=0)
  bottomLabel.place(relx=0,rely=0.9,relwidth=1.0,relheight=0.1)
  

  #主窗口循环
  root.mainloop()
  

  

  

  
#实例化计算器对象
  
c = Calc()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-550916-1-1.html 上篇帖子: Python:使用 optparse 处理命令行参数 下篇帖子: python学习笔记(一)之列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表