Python实现的简单计算器功能详解
程序员文章站
2022-04-09 13:52:50
本文实例讲述了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程序设计有所帮助。