2012-01-03 4 views
0

제가 정말로 도움이 필요한 것은 112 행의 함수입니다. GUI 계산기를 만들려고하는데 문제가있는 부분은 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 입니다. 파이썬 내장 함수 eval을 사용하여 입력 된 문자열을 처리합니다. 귀하의 경우에는 다음과 같이 번역됩니다.

answer = eval(a) 

eval은 일반 코드로 사용하지 않는 것이 좋습니다. 어떤 문자열이든 실행되면 위험한 것으로 간주됩니다. 그러나 귀하의 경우에는 유효한 대체 문자열입니다 (다른 하나는 입력 문자열을 구문 분석하고 연산자 char를 python operator 메서드 또는 사용자 정의 함수로 바인드하는 것입니다).

+0

+1! 잘 설명 된 대답. –

+0

고마워요,하지만 지금은 5/6 같은 방정식을 실행하면 둥글게되고 작동하도록 만들었습니다. 5./6을 인쇄해야합니다. 어떻게하면 플로트로 정의되거나 다른 방법이 될 수 있습니까? – user1108980

+0

추가 '__future__ 수입 구분 '에서. 도움이 되었다면 대답을 선택하십시오. – joaquin

관련 문제