当前位置: 移动技术网 > IT编程>脚本编程>Python > Python实现的简单计算器功能详解

Python实现的简单计算器功能详解

2018年09月23日  | 移动技术网IT编程  | 我要评论

1234网址大全,溆浦房产网,中国两性网

本文实例讲述了python实现的简单计算器功能。分享给大家供大家参考,具体如下:

使用python编写一款简易的计算器


计算器效果图

首先搭建计算器的面板:


计算器面板结构

建造一个继承于wx.frame的frame,在init属性函数中搭建面板

class calcframe(wx.frame):#建造一个继承于wx.frame的frame
  def __init__(self,title):
    wx.frame.__init__ (self,none,-1,title,
              pos=(100,300),size=(300,320))
    panel=wx.panel(self)
    boxsize=wx.boxsizer(wx.vertical)
    gridbox=wx.gridsizer(4,4,1,1)
    self.equation=""#记录一个等式,把它print到textctrl中

建立计算机显示屏textctrl

    self.textprint=wx.textctrl(panel,-1,'',style=wx.te_right|wx.te_readonly)#文本控制控件
    self.bgfont=wx.font(25,wx.swiss,wx.normal,wx.bold,face=u'roboto')#设置字体样式
    self.textprint.setfont(self.bgfont)#使用setfont将设置的字体样式运用在textprint中
    self.textprint.setforegroundcolour('black')#设置前景色
    self.textprint.setbackgroundcolour('white')#设置后景色

按钮

    self.buttondata="7 8 9 del 4 5 6 ac 1 2 3 * / + - =".split()
    #产生buttoniterm的label
    #将label分配到按钮上去
    buttonlength=len(self.buttondata)
    for i in range(buttonlength):
      labels="%s" %self.buttondata[i]
      buttoniterm = wx.button(panel,i,labels)
      self.createhandler(buttoniterm,labels)
      gridbox.add(buttoniterm,0,flag=wx.expand)

将textprint与buttoniterm放入boxsize中,再将将boxsize放入panel里

    boxsize.add(self.textprint,1,flag=wx.expand)#在boxsize中加上文本控制控件,比例为1
    boxsize.add(gridbox,5,flag=wx.expand)
    panel.setsizerandfit(boxsize)#将boxsize放入panel里

创建不同按钮触发的不同函数

  def createhandler(self,button,labels):
    #self.bind(wx.evt_button, self.onbutton1, self.button1)
    #这里self是一个frame(wxpython中的窗体这样的东西),而button1是放在这个frame下面的一个button,self.onbutton1就是事件处理函数。而wxpython定死了事件处理函数的形式:
    items="del ac ="
    if labels not in items:
      self.bind(wx.evt_button,self.onappend,button)
    elif labels=='del':
      self.bind(wx.evt_button,self.ondel,button)
    elif labels=='ac':
      self.bind(wx.evt_button,self.onac,button)
    elif labels=='=':
      self.bind(wx.evt_button,self.onequal,button)

不同函数的具体执行过程

  def onappend(self,event):
    eventbutton = event.geteventobject()
    label = eventbutton.getlabel()
    self.equation += label
    self.textprint.setvalue(self.equation)
  def ondel(self,event):
    self.equation=self.equation[:-1]
    self.textprint.setvalue(self.equation)
  def onac(self,event):
    self.textprint.clear()
    self.equation=""
  def onequal(self,event):
    string=self.equation
    try:
      taget=eval(string)#执行这段代码得到的结果
      self.equation=str(taget)
      self.textprint.setvalue(self.equation)
    except syntaxerror:#弹出消息对话框
      dlg=wx.messagedialog(self,u'输入格式错误',wx.ok|wx.icon_information)
      dlg.showmodal()
      dlg.destory()

app类

class app(wx.app):
  def oninit(self):
    self.frame =calcframe(u'计算器')
    self.frame.center()
    self.frame.show()
    return true

测试代码:

if __name__=="__main__":
  app=app()
  app.mainloop()

完整示例代码如下:

# -*- coding:utf-8 -*-
'''
created on 2018年8月25日
@author: administrator
'''
import wx
class calcframe(wx.frame):#建造一个继承于wx.frame的frame
  def __init__(self,title):
    wx.frame.__init__ (self,none,-1,title,
              pos=(100,300),size=(300,320))
    panel=wx.panel(self)
    boxsize=wx.boxsizer(wx.vertical)
    gridbox=wx.gridsizer(4,4,1,1)
    self.equation=""#记录一个等式,把它print到textctrl中
    self.textprint=wx.textctrl(panel,-1,'',style=wx.te_right|wx.te_readonly)#文本控制控件
    self.bgfont=wx.font(25,wx.swiss,wx.normal,wx.bold,face=u'roboto')#设置字体样式
    self.textprint.setfont(self.bgfont)#使用setfont将设置的字体样式运用在textprint中
    self.textprint.setforegroundcolour('black')#设置前景色
    self.textprint.setbackgroundcolour('white')#设置后景色
    self.buttondata="7 8 9 del 4 5 6 ac 1 2 3 * / + - =".split()
    #产生buttoniterm的label
    #将label分配到按钮上去
    buttonlength=len(self.buttondata)
    for i in range(buttonlength):
      labels="%s" %self.buttondata[i]
      buttoniterm = wx.button(panel,i,labels)
      self.createhandler(buttoniterm,labels)
      gridbox.add(buttoniterm,0,flag=wx.expand)
    boxsize.add(self.textprint,1,flag=wx.expand)#在boxsize中加上文本控制控件,比例为1
    boxsize.add(gridbox,5,flag=wx.expand)
    panel.setsizerandfit(boxsize)#将boxsize放入panel里
  def createhandler(self,button,labels):
    #self.bind(wx.evt_button, self.onbutton1, self.button1)
    #这里self是一个frame(wxpython中的窗体这样的东西),而button1是放在这个frame下面的一个button,self.onbutton1就是事件处理函数。而wxpython定死了事件处理函数的形式:
    items="del ac ="
    if labels not in items:
      self.bind(wx.evt_button,self.onappend,button)
    elif labels=='del':
      self.bind(wx.evt_button,self.ondel,button)
    elif labels=='ac':
      self.bind(wx.evt_button,self.onac,button)
    elif labels=='=':
      self.bind(wx.evt_button,self.onequal,button)
  def onappend(self,event):
    eventbutton = event.geteventobject()
    label = eventbutton.getlabel()
    self.equation += label
    self.textprint.setvalue(self.equation)
  def ondel(self,event):
    self.equation=self.equation[:-1]
    self.textprint.setvalue(self.equation)
  def onac(self,event):
    self.textprint.clear()
    self.equation=""
  def onequal(self,event):
    string=self.equation
    try:
      taget=eval(string)#执行这段代码得到的结果
      self.equation=str(taget)
      self.textprint.setvalue(self.equation)
    except syntaxerror:#弹出消息对话框
      dlg=wx.messagedialog(self,u'输入格式错误',wx.ok|wx.icon_information)
      dlg.showmodal()
      dlg.destory()
class app(wx.app):
  def oninit(self):
    self.frame =calcframe(u'计算器')
    self.frame.center()
    self.frame.show()
    return true
if __name__=="__main__":
  app=app()
  app.mainloop()

ps:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:

科学计算器在线使用_高级计算器在线计算:

在线计算器_标准计算器:

更多关于python相关内容感兴趣的读者可查看本站专题:《python数学运算技巧总结》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》、《python入门与进阶经典教程》及《python文件与目录操作技巧汇总

希望本文所述对大家python程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网