首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wxpython.how在TextCtrl区只使用一个函数来显示按钮标签,并存储数值来计算一些东西?

wxpython.how在TextCtrl区只使用一个函数来显示按钮标签,并存储数值来计算一些东西?
EN

Stack Overflow用户
提问于 2014-12-21 02:55:07
回答 1查看 279关注 0票数 0

我正在尝试用wxpython.I做一个计算器。我想在文本will区域中显示按钮标签,并使用该值来计算something.Can。我只使用一个函数就可以做到这一点。我如何存储该值以使用it.Like当我按下7+8时,它将显示7+8,当我按下"ans“按钮时,它将计算15。我尝试了一个program.But,它显示-”int()的无效文本,基数为10:'7+'“。

代码语言:javascript
运行
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2014-12-23 22:26:37

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

代码语言:javascript
运行
复制
answer = eval( self.stext.GetValue() )

有关详细信息,请参阅documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27583322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档