TypeError:由名称"id"和位置(2)给出的参数 - wxPython

Mic*_*x2a 5 python wxpython python-2.7

我正在尝试使用Notebook类在wxPython中制作标签.使用上面链接的教程,我想出了以下代码:

#!/usr/bin/env python

import wx

class DeployTab(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super(DeployTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)

        self.sizer = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        deploy = wx.Button(
            self.main_panel, 
            label="test 1",
            size=(250, 100))
        self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)

        self.SetSizer(self.sizer)

class ConfigTab(wx.Panel):
    # For now, copy.
    def __init__(self, parent, *args, **kwargs):
        super(ConfigTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)

        self.sizer = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        deploy = wx.Button(
            self.main_panel, 
            label="test2",
            size=(250, 100))
        self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)

        self.SetSizer(self.sizer)

class NotebookTabs(wx.Notebook):
    def __init__(self, parent):
        super(NotebookTabs, self).__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)

        self.deploy_tab = DeployTab(self)
        self.deploy_tab.SetBackgroundColor("Gray")
        self.AddPage(self.main_tab, "Go!")

        self.options_tab = ConfigTab(self)
        self.AddPage(self.options_tab, "Options")


class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.SetSize((300, 250))
        self.SetTitle('Testing')
        self.Centre()
        self.Show(True)

        self.setup_sizers()

    def setup_sizers(self):
        self.panel = wx.Panel(self)
        self.notebook = NotebookTabs(self.panel)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.notebook, 1, wx.ALL|wx.EXPAND, 5)
        self.panel.SetSizer(self.sizer)
        self.Layout()

    def on_quit(self, event):
        self.Close()

def main():
    app = wx.App()
    MainWindow(None)
    app.MainLoop()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.pyw", line 72, in main
    MainWindow(None)
  File "test.pyw", line 55, in __init__
    self.setup_sizers()
  File "test.pyw", line 61, in setup_sizers
    self.notebook = NotebookTabs(self.panel)
  File "test.pyw", line 36, in __init__
    super(NotebookTabs, self).__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_controls.py", line 3147, in __init__
    _controls_.Notebook_swiginit(self,_controls_.new_Notebook(*args, **kwargs))
TypeError: Argument given by name ('id') and position (2)
Run Code Online (Sandbox Code Playgroud)

然后我改为NotebookTabs以下(简化了超类初始化):

class NotebookTabs(wx.Notebook):
    def __init__(self, parent):
        super(NotebookTabs, self).__init__(self, parent)

        self.deploy_tab = DeployTab(self)
        self.deploy_tab.SetBackgroundColor("Gray")
        self.AddPage(self.main_tab, "Go!")

        self.options_tab = ConfigTab(self)
        self.AddPage(self.options_tab, "Options")
Run Code Online (Sandbox Code Playgroud)

...并收到以下错误消息:

File "<stdin>", line 1, in <module>
  File "test.pyw", line 72, in main
    MainWindow(None)
  File "test.pyw", line 55, in __init__
    self.setup_sizers()
  File "test.pyw", line 61, in setup_sizers
    self.notebook = NotebookTabs(self.panel)
  File "test.pyw", line 36, in __init__
    super(NotebookTabs, self).__init__(self, parent)
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_controls.py", line 3147, in __init__
    _controls_.Notebook_swiginit(self,_controls_.new_Notebook(*args, **kwargs))
TypeError: in method 'new_Notebook', expected argument 1 of type 'wxWindows *'
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些明显的东西,但我似乎无法辨别出什么是错的.有人可以帮我识别问题吗?

Pav*_*sov 4

你不应该传递selfsuper(NotebookTabs, self).__init__super负责处理:

super(NotebookTabs, self).__init__(parent)

super(DeployTab, self).__init__(*args, parent=parent, id=wx.ID_ANY, **kwargs)

super(ConfigTab, self).__init__(*args, parent=parent, id=wx.ID_ANY, **kwargs)
Run Code Online (Sandbox Code Playgroud)