我正在尝试用wxpython.I做一个计算器。我想在文本will区域中显示按钮标签,并使用该值来计算something.Can。我只使用一个函数就可以做到这一点。我如何存储该值以使用it.Like当我按下7+8时,它将显示7+8,当我按下"ans“按钮时,它将计算15。我尝试了一个program.But,它显示-”int()的无效文本,基数为10:'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()发布于 2014-12-23 22:26:37
你可以采取几种方法。两者中较难的是为self.stext中的值创建解析器。然而,这也是最灵活的方法,这取决于你的计算器变得有多复杂。更简单的方法是使用Python的eval内置。有些人说eval是危险的,因为它可以执行任意代码(这是真的),但既然你将控制进入文本控件的内容,你应该能够防止任何不好的事情发生。如果你使用eval,那么你可以这样做:
answer = eval( self.stext.GetValue() )有关详细信息,请参阅documentation。
https://stackoverflow.com/questions/27583322
复制相似问题