wxPython GridSizer.Add () не работает для пользовательского элемента управления - PullRequest
0 голосов
/ 14 августа 2010

Я пытаюсь создать пользовательский элемент управления на основе wx.richtext.RichTextCtrl, и у меня возникла проблема.Всякий раз, когда я пытаюсь добавить пользовательский элемент управления в классификатор, 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 Ответ

3 голосов
/ 14 августа 2010

Я думаю, что вам нужно явно вызвать __ 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'
...