欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-09 13:52:50
本文实例讲述了python实现的简单计算器功能。分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板:...

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

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

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程序设计有所帮助。