2012-01-03 2 views
0

Что мне действительно нужно, так это функция в строке 112. Я пытаюсь создать калькулятор графического интерфейса, в котором у меня возникают проблемы, когда человек входит в проблему вроде 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

Пожалуйста, попробуйте обрезать код, когда вы отправляете вопрос. Мне лучше делать что-то, чем пытаться читать все это, учитывая, что подавляющее большинство из них выглядит неактуальным. Разработка того, что является и не имеет значения, является хорошим упражнением для поиска ошибок. –

+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 часто не рекомендуется для общего кода. Поскольку он выполняет любую строку, которую он получает, он считается опасным. Однако для вашего случая это допустимая альтернатива (другой должен был бы проанализировать входную строку и привязать символы оператора с помощью методов python operator или пользовательских функций).

+0

+1! Хорошо объясненный ответ. –

+0

Спасибо, но теперь, когда я запускаю уравнение вроде 5/6, оно будет округлено, и чтобы оно работало, мне нужно напечатать 5./6. Как я могу сделать это так, чтобы он определялся как поплавок или есть другой способ – user1108980

+0

Add 'из __future__ import division'. Выберите ответ, если он вам был полезен. – joaquin

 Смежные вопросы

  • Нет связанных вопросов^_^