我正在尝试使用 Notebook 在 wxPython 中创建选项卡类(class)。使用上面链接的教程,我想出了以下代码:
#!/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()
它给出了以下错误:
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)
然后我将 NotebookTabs
更改为以下内容(简化父类(super class)初始化):
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")
...并收到以下错误消息:
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 *'
我觉得我遗漏了一些明显的东西,但我似乎无法确定哪里出了问题。有人可以帮我找出问题所在吗?
最佳答案
你不应该将 self
传递给 super(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)
关于python - 类型错误 : Argument given by name "id" and position(2) -- wxPython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051967/