2012-01-03 8 views
0

私は本当に助けが必要なのは、行112の関数です。私は問題を抱えている唯一の部分であるGUI電卓を作成しようとしています。人は5 + 5のような問題を入力すると、それを変数に格納することはできません。だから私はどのように問題を解決し、テキストボックスに出力します。 は、私はあなたの問題はここにあると思いどうすればtextxrlの入力テキストを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

質問を投稿しているときにコードをトリミングしてみてください。私はそれの大部分が無関係に見えるので、すべてを読むことを試みるよりも良いことがあります。関連するものと関連していないものを作ることは、バグを見つけるための良い練習でもあります。 –

+0

申し訳ありませんが、心に留めてください – user1108980

答えて

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は、一般的なコードではお勧めできません。あなたのケースでは、それは有効な選択肢です(もう1つは、入力文字列を解析し、演算子の文字列をPython operatorのメソッドまたはカスタム関数でバインドすることです)。

+0

+1!よく説明された答え。 –

+0

ありがとうございますが、5/6のような式を実行すると、丸められ、5/6を出力する必要があります。どのようにしてフロートとして定義するか、別の方法がありますか? – user1108980

+0

'__future__輸入部門から '。あなたが役に立った場合は、回答を選択してください。 – joaquin

関連する問題