本文实例讲述了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:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器:http://tools.jb51.net/jisuanqi/jsq

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

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

本文标题: Python实现的简单计算器功能详解

本文地址: http://www.cppcns.com/jiaoben/python/238255.html

python简单计算器综合实验报告_Python实现的简单计算器功能详解相关推荐

  1. python简单计算器综合实验报告_python之简单计算器

    importre#问题:让用户选择1,2不现实,如何让用户自动加减乘除#思考:现在已经能够处理,单个的加减或乘除#可否在混合中先分组出(乘除) eg: ['8+9+','9*4/3','-','4*2 ...

  2. python自动填写小程序表单_python小程序实现刷票功能详解

    刷票一般要突破以下限制: 1.验证码识别 2.同一ip不可连续投票 解决办法 1.用tesseract工具,链接在此 https://code.google.com/p/tesseract-ocr/ ...

  3. python 数列筛选_对numpy中的数组条件筛选功能详解

    在程序设计中,时常会遇到数据的唯一化.相同.相异信息的提取等工作,在格式化的向量存储矩阵中南,numpy能够提供比较不错的快速处理功能. 1,唯一化的实现: In [63]: data = np.ar ...

  4. python综合实验报告_Python程序设计实验报告五:综合运用三种基本结构进行程序设计(综合性实验)...

    安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名姚彩琴学号3190505129 成绩 日期 2020.4.22 指导老师修宇 [实验名称]综合运用三种基本结构进行程序设计(综合性实 ...

  5. python综合实验报告_Python程序设计 实验报告

    安徽工程大学 Python程序设计 实验报告 班级:物流192       姓名:刘马汉卿学号:319005211 成绩:            日期:2020年4月29日        指导老师:修 ...

  6. python分析方向的第三方库_Python标准库与第三方库详解

    干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...

  7. python数据清理的实践总结_python 数据的清理行为实例详解

    python 数据的清理行为实例详解 数据清洗主要是指填充缺失数据,消除噪声数据等操作,主要还是通过分析"脏数据"产生的原因和存在形式,利用现有的数据挖掘手段去清洗"脏数 ...

  8. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  9. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

最新文章

  1. NodeJs端口被占用的情况
  2. Oracle数据库知识要点
  3. 由su和su -的区别谈学习linux运维方法
  4. Spring boot的Spring MVC自动配置
  5. 【小技巧】当你在写博客时突然误删或覆盖原文时怎么办?
  6. 使用 RUP 管理小型项目和团队
  7. 面试-设计模式六大原则
  8. P3197 [HNOI2008]越狱(快速幂)
  9. flash 火狐总是崩溃_win10系统火狐flash插件总是崩溃的解决方法
  10. Ajax网络超时和和网络异常
  11. AcWing.282石子合并(区间DP)题解
  12. Lintcode14 First Position of Target Solution 题解
  13. Excel列与数字的转换
  14. 【NPDP】大师级管理人物盘点:现代管理之父-彼得·德鲁克
  15. 【LearnOpenGL】-PBR材质
  16. LDA的python实现之模型参数训练
  17. 西门子S7-1200 作MODBUS TCP客户端配置方法补充
  18. iOS面试题汇总(一)
  19. 【FME】矢量间进行空间传值、属性关联
  20. unity3d C#用匿名委托循环注册按钮点击事件报错:索引超界 ArgumentOutOfRangeException: Index was out of range. Must be non-ne

热门文章

  1. 快乐,因为有你——五一苏行记(一)
  2. z390 黑苹果启动盘_黑苹果硬件选购指南之ITX篇补充说明
  3. 某教育平台线上课程用户行为数据分析报告
  4. cosmic文档怎么写
  5. 2007年8月28日 月全食
  6. haimianjie工作日记:2023年5月
  7. 批量图片生成pdf C#源码
  8. 不同发展阶段舆情如分析方法与舆情简报撰写技巧详解
  9. 安卓系统加速_苹果1G运行内存和安卓1G运行内存相等吗?
  10. css-animation动画