2012-01-03 75 views
0

我真的需要帮助的是线112上的功能。我试图创建一个GUI计算器唯一的一部分,我有麻烦是当人进入一个像5 + 5这样的问题,它不能存储在一个可变的。那么我将如何解决问题,然后将其输出到文本框。 谢谢我怎样才能从textctrl输入文本输出wxpython中的答案

import math 
import wx 

class justin(wx.Frame): 

    loop=False 

    def __init__(self,parent,id): 

     wx.Frame.__init__(self,parent,id,'MAP2', size=(250, 300)) 
     panel=wx.Panel(self) 

     status=self.CreateStatusBar() 
     file_menu = wx.MenuBar() 
     menu1=wx.Menu() 
     menu2=wx.Menu() 
     exit1=menu1.Append(wx.NewId(),"exit","exit") 
     info1=menu1.Append(wx.NewId(),"info","info") 
     instr=menu2.Append(wx.NewId(),"instructions","instructions") 
     file_menu.Append(menu1,"file") 
     file_menu.Append(menu2,"instructions") 
     self.SetMenuBar(file_menu) 

     self.panel = panel 

     self.Bind(wx.EVT_MENU, self.onexit, exit1) 
     self.Bind(wx.EVT_MENU, self.oninfo, info1) 
     self.Bind(wx.EVT_MENU, self.oninstr, instr) 

     self.box=wx.TextCtrl(panel,-1,"",(0,0),(180,45))   

     self.button1=wx.Button(panel,label='1', size=(45,45)) 
     self.button2=wx.Button(panel,label='2', size=(45,45)) 
     self.button3=wx.Button(panel,label='3', size=(45,45)) 
     self.button4=wx.Button(panel,label='4', size=(45,45)) 
     self.button5=wx.Button(panel,label='5', size=(45,45)) 
     self.button6=wx.Button(panel,label='6', size=(45,45)) 
     self.button7=wx.Button(panel,label='7', size=(45,45)) 
     self.button8=wx.Button(panel,label='8', size=(45,45)) 
     self.button9=wx.Button(panel,label='9', size=(45,45)) 
     self.buttonplus=wx.Button(panel,label='+', size=(45,45)) 
     self.buttonsub=wx.Button(panel,label='-', size=(45,45)) 
     self.buttonmul=wx.Button(panel,label='*', size=(45,45)) 
     self.buttondiv=wx.Button(panel,label='/', size=(45,45)) 
     self.button0=wx.Button(panel,label='0', size=(45,45)) 
     self.enter=wx.Button(panel,label='enter',size=(45,45)) 

     siz=wx.GridBagSizer(5,5) 
     siz.Add(self.button1,pos=(2,0)) 
     siz.Add(self.button2,pos=(2,1)) 
     siz.Add(self.button3,pos=(2,2)) 
     siz.Add(self.button4,pos=(3,0)) 
     siz.Add(self.button5,pos=(3,1)) 
     siz.Add(self.button6,pos=(3,2)) 
     siz.Add(self.button7,pos=(4,0)) 
     siz.Add(self.button8,pos=(4,1)) 
     siz.Add(self.button9,pos=(4,2)) 
     siz.Add(self.buttonplus,pos=(2,3)) 
     siz.Add(self.buttonsub,pos=(3,3)) 
     siz.Add(self.buttonmul,pos=(4,3)) 
     siz.Add(self.buttondiv,pos=(5,3)) 
     siz.Add(self.button0,pos=(5,2)) 
     siz.Add(self.enter,pos=(5,0)) 

     panel.SetSizer(siz) 

     self.Bind(wx.EVT_BUTTON,self.ebutton1,self.button1) 
     self.Bind(wx.EVT_BUTTON,self.ebutton2,self.button2) 
     self.Bind(wx.EVT_BUTTON,self.ebutton3,self.button3) 
     self.Bind(wx.EVT_BUTTON,self.ebutton4,self.button4) 
     self.Bind(wx.EVT_BUTTON,self.ebutton5,self.button5) 
     self.Bind(wx.EVT_BUTTON,self.ebutton6,self.button6) 
     self.Bind(wx.EVT_BUTTON,self.ebutton7,self.button7) 
     self.Bind(wx.EVT_BUTTON,self.ebutton8,self.button8) 
     self.Bind(wx.EVT_BUTTON,self.ebutton9,self.button9) 
     self.Bind(wx.EVT_BUTTON,self.ebutton0,self.button0) 
     self.Bind(wx.EVT_BUTTON,self.ebuttonplus,self.buttonplus) 
     self.Bind(wx.EVT_BUTTON,self.ebuttonsub,self.buttonsub) 
     self.Bind(wx.EVT_BUTTON,self.ebuttonmul,self.buttonmul) 
     self.Bind(wx.EVT_BUTTON,self.ebuttondiv,self.buttondiv) 
     self.Bind(wx.EVT_BUTTON,self.eenter,self.enter) 


    def ebutton1(self,e): 
     self.box.AppendText('1') 
    def ebutton2(self,e): 
     self.box.AppendText('2') 
    def ebutton3(self,e): 
     self.box.AppendText('3') 
    def ebutton4(self,e): 
     self.box.AppendText('4') 
    def ebutton5(self,e): 
     self.box.AppendText('5') 
    def ebutton6(self,e): 
     self.box.AppendText('6') 
    def ebutton7(self,e): 
     self.box.AppendText('7') 
    def ebutton8(self,e): 
     self.box.AppendText('8') 
    def ebutton9(self,e): 
     self.box.AppendText('9') 
    def ebutton0(self,e): 
     self.box.AppendText('0') 
    def ebuttonplus(self,e): 
     self.box.AppendText('+') 
    def ebuttonsub(self,e): 
     self.box.AppendText('-') 
    def ebuttonmul(self,e): 
     self.box.AppendText('*') 
    def ebuttondiv(self,e): 
     self.box.AppendText('/') 
    def eenter(self,e): 
     a=self.box.GetValue() 
     answer=int(a) 
     ans=str(answer) 
     self.box.SetValue(ans) 


    def onexit(self,e): 
     self.Close() 

    def oninfo(self,e): 
     dlg = wx.MessageDialog(None,"This is a program that computes percent error value. MAP2 is created by Justin Rolf","info",wx.OK) 
     dlg.ShowModal() 
     dlg.Destroy() 

    def oninstr(self,e): 
     dlg1 = wx.MessageDialog(None,"To use this program enter your first number in the top gray box (make sure to have all text deleted before you type), then enter your second number in the bottom box, and hit the enter button","instructions",wx.OK) 
     dlg1.ShowModal() 
     dlg1.Destroy() 


if __name__=='__main__': 
    app=wx.PySimpleApp() 
    frame=justin(parent=None, id=-1) 
    frame.Show() 
    app.MainLoop() 
+0

请在发布问题时尝试裁减代码。我有更好的事情要做,而不是尝试去阅读所有的东西,因为绝大多数东西看起来都是不相关的。找出和不相关的东西也是寻找错误的好工具。 – 2012-01-03 17:44:35

+0

对不起,请记住 – user1108980 2012-01-04 03:02:58

回答

1

我觉得你的问题是在这里:

def eenter(self,e): 
    a=self.box.GetValue() 
    answer=int(a) 
    ans=str(answer) 
    self.box.SetValue(ans) 

它不起作用,因为a是不能直接转换为整数的字符串。
你可以看到here an example of a wxPython calculator。它只需少于50行的代码,所以你可以从这段代码中学到很多东西。另一个例子是here 你会发现他们使用python内置函数eval来处理输入的字符串。对于您的情况,这可以转化为:

answer = eval(a) 

eval通常不推荐用于通用代码。当它执行任何字符串时,它被认为是危险的,但是,对于你的情况,这是一个有效的替代方案(另一个是解析输入字符串并用python operator方法或自定义函数绑定运算符字符)。

+0

+1!解释得很好的答案。 – 2012-01-03 06:41:26

+0

谢谢,但现在当我运行一个像5/6这样的公式时,它将圆滑并使其工作,我需要打印5./6.我如何使它定义为浮动或有另一种方式 – user1108980 2012-01-04 02:54:01

+0

Add来自__未来_进口部门'。请选择对您有用的答案。 – joaquin 2012-01-04 08:14:23

相关问题