2010-08-14 4 views
0

J'essaie de créer un contrôle personnalisé basé sur wx.richtext.RichTextCtrl et je rencontre un problème. Chaque fois que je tente d'ajouter le contrôle personnalisé à un calibreur, wxPython étrangle avec l'erreurwxPython GridSizer.Add() ne fonctionne pas pour le contrôle personnalisé

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 

Le contrôle personnalisé est à ce moment extrêmement simple et ressemble à ce

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') 

Le code J'utilise pour ajouter le contrôle au calibreur est:

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

Des idées de ce que je fais mal ici?

Répondre

3

Je pense que vous devez appeler __ init __ explicitement, donc vous pouvez passer en 'self'. Sinon, vous créez simplement une nouvelle instance de RichTextCtrl, sans initialiser correctement votre sous-classe.

OIEau:

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' 
+0

Bah! Je pensais que j'avais appelé «__init__» explicitement. Il est surprenant de voir à quelle fréquence vos yeux ignorent les erreurs que vous devriez savoir mieux que de faire. –

+0

Oui, parfois vous êtes tellement occupé à chercher quelque chose de compliqué, une chose simple va glisser à côté. Ça m'arrive au moins une fois par mois;) – JimG

Questions connexes