Как я могу получить введенный текст из textctrl для вывода ответа в wxpython - PullRequest
0 голосов
/ 03 января 2012

Мне действительно нужна помощь в строке 112. Я пытаюсь создать калькулятор с графическим интерфейсом, единственная часть, с которой у меня возникают проблемы, это когда человек сталкивается с проблемой, такой как 5 + 5, он не может сохранить ее впеременная.Итак, как бы я решить проблему, а затем вывести его в текстовое поле.спасибо

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()

1 Ответ

1 голос
/ 03 января 2012

Я думаю, что ваша проблема здесь:

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

Это не работает, потому что a - это строка, которая не может быть напрямую преобразована в целое число.
Вы видите Вот пример калькулятора wxPython .Это занимает менее 50 строк кода, поэтому вы можете многому научиться из этого кода.Другой пример: здесь Вы обнаружите, что они используют встроенную функцию Python eval для обработки введенной строки.Для вашего случая это означает:

answer = eval(a)

eval часто не рекомендуется для общего кода.Поскольку он выполняет любую полученную строку, он считается опасным. Однако для вашего случая это допустимая альтернатива (другой вариант - проанализировать входную строку и связать операторные символы с помощью методов или пользовательских функций python operator ).

...