python和wxpython编写的计算器 (中级水平)
来源:互联网 发布:java locale类 编辑:程序博客网 时间:2024/06/07 15:21
source: http://blog.163.com/lxq_102172/blog/static/133398015201231012213428/
# -*- coding: utf-8 -*-from __future__ import divisionimport wximport mathlabels='1 1 1 1 1 MC MR MS M+ M- <- CE C +- Sqr 7 8 9 / % 4 5 6 * 1/x 1 2 3 - 0 0 . . + 2'.split()class CalFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None, -1, 'Calculator', size=(230,310), style=wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MINIMIZE_BOX |wx.MAXIMIZE_BOX)) panel=wx.Panel(self) panel.SetBackgroundColour('White') self.createMenubar() self.createButtons(panel) def createMenubar(self): menuBar=wx.MenuBar() menu1=wx.Menu() menuBar.Append(menu1,"View") menu2=wx.Menu() menuBar.Append(menu2,"Edit") menu3=wx.Menu() menuBar.Append(menu3,"Help") self.SetMenuBar(menuBar) def createButtons(self,panel): sizer = wx.GridBagSizer(hgap=5, vgap=5)#grid sizer self.text=wx.TextCtrl(panel, wx.NewId(),value='0', style=wx.TE_READONLY | wx.TE_RIGHT | wx.TE_NOHIDESEL, size=(50,50)) sizer.Add(self.text,pos=(0,0),span=(1,5),flag=wx.EXPAND) i=0 for row in range(1,7): for col in range(5): i=i+1 self.button=wx.Button(panel, label=str(labels[row*5+col]),size=(40,30), id=i) self.button.Bind(wx.EVT_BUTTON, self.Handler, self.button) sizer.Add(self.button,pos=(row,col)) sizer.Detach(25) sizer.Detach(29) sizer.Detach(25) sizer.Detach(25) self.button=wx.Button(panel, label='=',size=(40,60), id=30) self.button.Bind(wx.EVT_BUTTON,self.Handler, self.button) sizer.Add(self.button,pos=(5,4),span=(2,1),flag=wx.EXPAND) self.button=wx.Button(panel,label='0',id=25) self.button.Bind(wx.EVT_BUTTON,self.Handler, self.button) sizer.Add(self.button,pos=(6,0),span=(1,2),flag=wx.EXPAND) panel.SetSizer(sizer) panel.Fit() self.operand1=None self.operand2=None self.operator=None self.temp1=0 def Handler(self,event): Id=event.GetId() if Id in [11,12,13,16,17,18,21,22,23,25]: if self.text.GetValue()=='0': self.text.SetValue('') self.text.AppendText(event.GetEventObject().GetLabel()) else: self.text.SetValue(self.text.GetValue()+event.GetEventObject().GetLabel()) elif Id==28: #. if '.' in self.text.GetValue()[(self.Index()+1):]: self.text.SetValue(self.text.GetValue()) else: self.text.SetValue(self.text.GetValue()+event.GetEventObject().GetLabel()) elif Id==8: #C self.text.SetValue('0') self.operand1=None self.operand2=None self.operator=None self.temp1=0 elif Id==7: #CE self.text.SetValue(self.text.GetValue()[0:(self.Index()+1)]) elif Id==6: #<- self.text.SetValue(self.text.GetValue()[0:-1]) if len(self.text.GetValue())<=0: self.text.SetValue('0') elif Id==9: #+- if self.text.GetValue()=='0': pass else: if self.text.GetValue()[0]!='-' & self.operand2==None: self.text.SetValue('-'+self.text.GetValue()) else: self.text.SetValue(self.text.GetValue()[1:]) if self.operand2!=None: pass elif Id==10: #Sqr try: self.text.SetValue(str(math.sqrt(float(self.text.GetValue())))) except ValueError: self.text.SetValue('ValueError:math domain error') elif Id==29: #+ self.temp1=self.temp1+1 self.operator='+' self.Repeat() elif Id==24: #- self.temp1=self.temp1+1 self.operator='-' self.Repeat() elif Id==19: #* self.temp1=self.temp1+1 self.operator='*' self.Repeat() elif Id==14: #/ self.temp1=self.temp1+1 self.operator='/' self.Repeat() elif Id==20: #1/x try: self.text.SetValue(str(1.0/(float(self.text.GetValue())))) except ZeroDivisionError: self.text.SetValue('ZeroDivisionError: float division by zero') elif Id==15: #% self.operand2=eval(self.operand1) * eval(self.operand2)/100.0 self.operand2=str(self.operand2) self.Result() self.temp1=0 elif Id==30: #= self.Result() self.temp1=0 if self.temp1>=2: try: if self.operand2!=None and self.operand2!='' and self.operand1!=None and self.operator!=None: self.text.SetValue(str(eval(self.operand1 + self.operator + self.operand2))) self.operand1=self.text.GetValue() self.operand2=None else: pass except ZeroDivisionError: self.text.SetValue('ZeroDivisionError: float division by zero') self.Repeat() self.temp1=1 if self.temp1%2==0: if self.operator==None: self.operand1=self.text.GetValue() else: self.operand1=self.text.GetValue()[0:self.Index()] else: self.operand2=self.text.GetValue()[(self.Index()+1):] print self.operand1,self.operator, self.operand2 def Index(self): #���ز������±� a=list(self.text.GetValue()) if self.operator==None or self.operator not in a: b=-1 else: b=a.index(self.operator) return b def Repeat(self): if self.text.GetValue()[-1] in '+-*/': self.text.SetValue(self.text.GetValue()[0:self.Index()] +self.operator) else: self.text.SetValue(self.text.GetValue()+self.operator) def Result(self): try: if self.operand1!=None and self.operator!=None: self.text.SetValue(str(eval(self.operand1 + self.operator + self.operand2))) self.operand1=None self.operand2=None self.operator=None self.temp1=0 except ZeroDivisionError: self.text.SetValue('ZeroDivisionError: float division by zero') app=wx.PySimpleApp()frame=CalFrame()frame.Show()app.MainLoop()
- python和wxpython编写的计算器 (中级水平)
- 一个用wxpython编写的计算器源码
- Python:用wxpython写的计算器
- Python使用wxPython实现计算器
- 远程计算器控制(包含wxPython,socket)(初级水平)
- 远程计算器控制(包含wxPython,socket,thread)(初级水平)
- python一道关于编写计算器的题
- 基于python wxpython的简易计算器的源码(供大家学习)
- Python使用wxPython、py2exe编写桌面程序
- Python使用wxPython、py2exe编写桌面程序
- Python使用wxPython、py2exe编写桌面程序
- Python使用wxPython、py2exe编写桌面程序
- 随想录(python编写的计算器和贪吃蛇游戏)
- Python和wxpython小问题
- wxpython和python连接oracle
- python wxpython详解和使用
- 用Python写个计算器(初级水平)
- 自己总结的python和wxPython中文问题
- 它山之玉可以重构:身份证号(第四天)
- 错误C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
- vc2008下的对应vc6.0的Components and controls
- Java抽象类和接口的区别(好长时间没看这种文章了)
- 32种设计模式趣谈
- python和wxpython编写的计算器 (中级水平)
- #pragma comment 的用法
- spring配置文件详解(applicationContext.xml详解)
- 图解Java单例模式内存分配
- 图解Java继承内存分配
- jquery eq() get() css() lengh()
- gnuplot 学习小计4
- 解决无法安装SQL Server 2008 Management Studio Express的问题
- VC_各种文件后缀的解释