2010-06-30 19 views
3

我有一個派生類的小問題,即wx.ListItemwx.ListCtrl。成功地我得出wx.ListItem作爲MediaItem,代碼還沒有完成,但你明白了吧:WxPython:派生wx.ListItem,但wx.ListCtrl只返回舊類

class MediaItem(wx.ListItem): 
    def __init__ (self, fullname): 
     wx.ListItem.__init__(self) 
     self.fullname = fullname 
     self.filename = os.path.basename(fullname) 
     # snap... 

    def getFullname(self): 
     return self.fullname 

wx.ListCtrl欣然接受,因爲蟒蛇的鴨哲理。但現在問題是使用方法wx.ListCtrl.GetItem(index)返回ListItem,而不是MediaItem。 Python抱怨wx.ListItem沒有屬性getFullname

鑄造對象似乎是解決方案的錯誤方法。這可能無關的問題,但我粘貼違規行爲,以及:

filename = self.filelist.GetItem(event.GetIndex()).getFullname() 

self.filelistwx.ListCtrl

回答

2

我想我應該吮吸它,並回歸到次優手冊簿記。如果做得很好,這不是什麼大問題,但我對wxPython有更高的期望。

據說(從我搜索和收集的),問題是與wxPython類基地的代理性質。如果他們是用純Python編寫的,或者我使用C++編寫的,那麼這個工作會很好。但是現在,由於設計的限制,對象的多態性失敗了:原生C++ wx類將不會獲得任何東西,而只會返回一個wx.ListItem,它肯定只會返回wx.ListItem回wxPython。

因此,我的「解決方案」是導出wx.ListCtrl而不是wx.ListItem,存儲所需的信息並控制其中的外觀。