WxPython属性错误,*我的类*对象没有属性*我的函数*

时间:2013-11-15 16:24:22

标签: python wxpython wxwidgets

Python 2.7

Ubuntu 12.04

我的代码可用here

我正在尝试为自己组建一个基础,以便更轻松地创建wxPython应用程序,我使用我最后一个程序的设置作为基础,但它无法正常工作。

当我尝试将一个按钮绑定到一个函数时出现问题,这是以前对我有用的布局,但现在当我尝试使用按钮启动程序并且绑定到位时,我收到此错误:

AttributeError: 'my_panel' object has no attribute 'on_quit'

如果我删除了绑定,程序就会启动。

发生了什么事?

我已经看过其他有关此问题的问题,而且似乎大部分时间都是打字错误,我看了,但我找不到。

1 个答案:

答案 0 :(得分:1)

代码中的on_quit方法缩进太多了。它需要与init函数处于相同的缩进级别。这就是你所拥有的:

def __init__(self, parent):
    """docstring for __"""
    wx.Panel.__init__(self, parent)
    self.frame = parent

    self.main_sizer = wx.BoxSizer(wx.VERTICAL)
    self.widget_sizer = wx.BoxSizer(wx.VERTICAL)

    self.text_object = wx.StaticText(self, -1, 'Example')
    self.button_object = wx.Button(self, -1, 'QUIT')
    self.button_object.Bind(wx.EVT_BUTTON, self.on_quit)

    self.widget_sizer.Add(self.text_object, 0)
    self.widget_sizer.Add(self.button_object, 0)

    self.main_sizer.Add(self.widget_sizer, 0)


    def on_quit(self, event):
        """docstring for on"""
        self.Close()

这应该是这样的:

def __init__(self, parent):
    """docstring for __"""
    wx.Panel.__init__(self, parent)
    self.frame = parent

    self.main_sizer = wx.BoxSizer(wx.VERTICAL)
    self.widget_sizer = wx.BoxSizer(wx.VERTICAL)

    self.text_object = wx.StaticText(self, -1, 'Example')
    self.button_object = wx.Button(self, -1, 'QUIT')
    self.button_object.Bind(wx.EVT_BUTTON, self.on_quit)

    self.widget_sizer.Add(self.text_object, 0)
    self.widget_sizer.Add(self.button_object, 0)

    self.main_sizer.Add(self.widget_sizer, 0)


def on_quit(self, event):
    """docstring for on"""
    self.Close()

另请注意,“self.Close()”不起作用。它应该是 self.frame.Close()