wxpython.how只使用一个函数显示textctrl区域中的按钮标签并存储该值来计算某些东西?

时间:2014-12-20 18:55:07

标签: wxpython

我正在尝试使用wxpython制作一个计算器。我想在textctrl区域显示按钮标签并使用该值来计算某些东西。我只能使用一个函数吗?我该怎样才能存储要使用的值就像我按7 + 8时一样,它会显示7 + 8,当我按下" ans"按钮它会计算15.我已经尝试了一个程序。但是它说 -                      "基数为10的int()的文字无效:' 7 +'"

import wx

class Calculator(wx.Frame):
def __init__(self,parent,id):
    wx.Frame.__init__(self,parent,id,"Calculator",size=(300,400))
    self.panel=wx.Panel(self,wx.ID_ANY)
    self.stext=wx.TextCtrl(self.panel,-1,pos=(10,10),size=(260,50))
    self.stext.SetBackgroundColour('GRAY')
    b=wx.Button(self.panel,-1,'7',pos=(10,70),size=(30,30))
    b1=wx.Button(self.panel,-1,'8',pos=(60,70),size=(30,30))
    b2=wx.Button(self.panel,-1,'9',pos=(110,70),size=(30,30))
    b3=wx.Button(self.panel,-1,'+',pos=(160,70),size=(100,30))
    b4=wx.Button(self.panel,-1,'4',pos=(10,120),size=(30,30))
    b5=wx.Button(self.panel,-1,'5',pos=(60,120),size=(30,30))
    b6=wx.Button(self.panel,-1,'6',pos=(110,120),size=(30,30))
    b7= wx.Button(self.panel,-1,'-',pos=(160,120),size=(100,30))
    b8=wx.Button(self.panel,-1,'1',pos=(10,170),size=(30,30))
    b9=wx.Button(self.panel,-1,'2',pos=(60,170),size=(30,30))
    b10=wx.Button(self.panel,-1,'3',pos=(110,170),size=(30,30))
    b11=wx.Button(self.panel,-1,'*',pos=(160,170),size=(100,30))
    b12=wx.Button(self.panel,-1,'.',pos=(10,220),size=(30,30))
    b13=wx.Button(self.panel,-1,'0',pos=(60,220),size=(30,30))
    b14=wx.Button(self.panel,-1,'Ans',pos=(110,220),size=(30,30))
    b15=wx.Button(self.panel,-1,'/',pos=(160,220),size=(100,30))


    self.Bind(wx.EVT_BUTTON,self.seven,b)
    self.Bind(wx.EVT_BUTTON,self.eight,b1)
    self.Bind(wx.EVT_BUTTON,self.plus,b3)
    #self.Bind(wx.EVT_BUTTON,self.minus,b7)
    #self.Bind(wx.EVT_BUTTON,self.multi,b11)
    #self.Bind(wx.EVT_BUTTON,self.divide,b15)
    self.Bind(wx.EVT_BUTTON,self.equal,b14)

def seven(self,event):
    label = event.GetEventObject().GetLabel()
    self.stext.AppendText(label)

def eight(self,event):
    label = event.GetEventObject().GetLabel()
    self.stext.AppendText(label)

def plus(self,event):
    self.c=0
    label = event.GetEventObject().GetLabel()
    self.stext.AppendText(label)
    self.one=(int(self.stext.GetValue()))  #first value will be stored here

def equal(self,event):
    if self.c==0:
       self.two=(int(self.stext.GetValue()))  #second value will be stored here
       plus=self.one+self.two                 
       self.stext.SetValue(str(plus))

app=wx.App()
frame=Calculator(None,-1)
frame.Show()
app.MainLoop()

1 个答案:

答案 0 :(得分:0)

您可以采取几种方法。两者中较难的是为self.stext中的值创建解析器。然而,这也是最灵活的方法,取决于计算器的复杂程度。更简单的方法是使用Python的eval内置函数。有些人说eval是危险的,因为它可以执行任意代码(这是真的),但由于你将控制文本控件中的内容,你应该能够防止发生任何不良事件。如果你使用eval,那么你可以这样做:

answer = eval( self.stext.GetValue() )

有关详细信息,请参阅documentation