我正在尝试使用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()
答案 0 :(得分:0)
您可以采取几种方法。两者中较难的是为self.stext
中的值创建解析器。然而,这也是最灵活的方法,取决于计算器的复杂程度。更简单的方法是使用Python的eval
内置函数。有些人说eval是危险的,因为它可以执行任意代码(这是真的),但由于你将控制文本控件中的内容,你应该能够防止发生任何不良事件。如果你使用eval,那么你可以这样做:
answer = eval( self.stext.GetValue() )
有关详细信息,请参阅documentation。