wxPython GridSizer.Add()不适用于自定义控件

时间:2010-08-14 13:57:47

标签: python wxpython custom-controls

我正在尝试基于wx.richtext.RichTextCtrl创建自定义控件,但我遇到了问题。每当我尝试将自定义控件添加到sizer时,wxPython就会出现错误

Traceback (most recent call last):
  File "pyebook.py", line 46, in <module>
    frame = MainFrame(None, 'pyebook')
  File "pyebook.py", line 14, in __init__
    self.mainPanel.GetSizer().Add(ReaderControl(self.mainPanel), 1, wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
  File "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 12685, in Add
    return _core_.Sizer_Add(*args, **kwargs)
TypeError: wx.Window, wx.Sizer, wx.Size, or (w,h) expected for item

此时自定义控件非常简单,看起来像这样

class ReaderControl(wx.richtext.RichTextCtrl):
    def __init__(self, parent, id=-1, value=''):
        wx.richtext.RichTextCtrl(parent, id, value, style=wx.richtext.RE_READONLY, name='ReaderControl')

我用来将控件添加到sizer的代码是:

self.mainPanel.GetSizer().Add(ReaderControl(self.mainPanel), 1, wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:3)

我认为你需要明确地调用__ init __,这样你就可以传递'self'。否则,您只是创建一个新的RichTextCtrl实例,而不是正确初始化您的子类。

IOW:

class ReaderControl(wx.richtext.RichTextCtrl):
    def __init__(self, parent, id=-1, value=''):
        wx.richtext.RichTextCtrl.__init__(self, parent, id, value, style=wx.richtext.RE_READONLY, name='ReaderControl'