当没有给出参数时,wxPython错误“没有争论(2给出)”

时间:2013-12-11 14:42:45

标签: python wxpython event-binding

我一直在尝试为我正在编写的数据库创建一个小的python GUI。我的主GUI工作,但是我为数据输入创建的对话框会在单击按钮时抛出上述错误(GUI的其余部分似乎有效)。

下面是代码的缩减版本:

class AddDialog(wx.Dialog)
    def __init__(self, *args, **kw)
        super(AddDialog, self).__init__(*args, **kw)
        self.InitUI()
        self.SetSize((300,300))
        self.SetTitle('Add')
    def InitUI(self):
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        st = wx.StaticText(panel, label = 'Example')
        vbox.Add(st, flag = wx.ALIGN_CENTRE, border = 5)
        closeButton = wx.Button(self, label = "Close")
        vbox.Add(closerButton)
        self.SetSizer(vbox)
        closeButton.Bind(wx.EVT_BUTTON, self.OnClose)
    def OnClose():
        self.Destroy()

我得到的错误信息是:

TypeError: OnClose() takes no arguments(2 given)

但是,我认为我没有给出任何论据。任何人都可以帮助这个初学者解决python不喜欢的问题吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

执行此操作时:

         closeButton.Bind(wx.EVT_BUTTON, self.OnClose)

您正在创建一个链接,如果用户单击某个按钮,该窗口将收到EVT_BUTTON事件,并且您的函数OnClose将被调用。它将使用两个参数调用它 - self(对于任何类函数都是如此)和事件本身。您只需将函数标题更改为如下所示:

def OnClose(self, event):
    self.Destroy()

然后它应该工作。