2011-12-21 35 views
0

在这里,在我的面板打印是我的代码为什么我不能让静态文本使用wxPython的

import wx 

class justin(wx.Frame): 


    def __init__(self,parent,id): 

     wx.Frame.__init__(self,parent,id,'frame', size=(800, 500)) 
     panel=wx.Panel(self) 
     panel.SetBackgroundColour("red") 
     self.box1=wx.TextCtrl(panel, -1, "type number") 
     self.box2=wx.TextCtrl(panel, -1, "type number") 
     self.box1.SetBackgroundColour("gray") 
     self.box2.SetBackgroundColour("gray") 

     siz=wx.BoxSizer(wx.VERTICAL) 
     siz.Add(self.box1, 1) 
     siz.Add(self.box2, 1) 
     panel.SetSizer(siz) 

     button=wx.Button(panel, label="enter", pos=(250, 200), size=(100, 50)) 
     self.Bind(wx.EVT_BUTTON, self.yesitstrue, button) 

    def yesitstrue(self, event): 
     a=(float(self.box1.GetValue())) 
     b=(float(self.box2.GetValue())) 
     answer = a+b 
     wx.StaticText(self.panel,id, answer, pos=(200, 100)) 



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

什么,我试图做的是从两个文本框获取文本,并将其添加然后打印以GUI格式。当程序到达静态文本部分时,它说面板不存在。 我想任何帮助,如果发现任何其他错误,请让我知道,因为我真的需要它。

回答

0

有几个问题与您的代码:

  • panel:本panel不存在误差,因为在你的代码它的__init__方法是在yesitstrue方法不再可用的内部变量。要解决这个问题,您必须将其作为__init__方法中的实例属性进行分配,如下所示:self.panel = panel。之后,您可以使用self.panelyesitstrue方法访问它,正如您已经尝试的那样。

  • idint类型的nex_StaticText期望的参数2表示的第二个参数,id,不是预期的类型。请注意,id是一个python内置函数,这是导致问题的原因。该解决方案与panel的解决方案类似:将id参数指定为这样的实例属性:self.id = id。之后,使用self.id而不是仅仅id致电wx.StaticText

  • answer:所需的字符串或unicode类型意味着您传递的不是真正的文本。在代码中,ab转换为float,答案是他们的总和。因此,这也是一个float。为了解决这个问题,使用str转换answert为字符串并使用str(answer)

+0

所以现在我没有得到这个错误了,但我得到类型错误调用wx.StaticText:在方法“new_StaticText”,期望的参数类型2“诠释”我从来没有见过这个错误,不知道它想要我做什么 – user1108980 2011-12-22 13:47:14

+0

在编辑答案中解释了一些更多的问题。这一次,你应该得到你正在寻找的结果。 – jcollado 2011-12-22 18:48:49

+0

谢谢你们,我只看过jcollado的第一篇文章,并通过搞乱程序学习了其余的内容 – user1108980 2011-12-30 02:12:15

相关问题