[英]WxPython: deriving wx.ListItem but wx.ListCtrl only returns old class
我有與派生類,即一個小問題wx.ListItem
與wx.ListCtrl
。 我成功地衍生wx.ListItem
作為MediaItem
,代碼還沒有完成,但你明白了吧:
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
很高興地接受了因為Pythons duck哲學。 但現在問題是使用方法wx.ListCtrl.GetItem(index)
返回ListItem
,而不是MediaItem
。 Python抱怨wx.ListItem
沒有屬性getFullname
。
轉換對象似乎是解決方案的錯誤方法。 這可能與問題無關,但我也按原樣粘貼了違規行:
filename = self.filelist.GetItem(event.GetIndex()).getFullname()
self.filelist
是一個wx.ListCtrl
。
我想我應該把它搞砸,並回歸到次優的手工簿記。 如果做得很有品味,這不是什么大問題,但我對wxPython抱有更高的期望。
據說(從我搜索和收集的內容)問題是wxPython類庫的代理性質。 如果他們用純Python編寫,或者我用C ++編寫,這本來就可以。 但是現在由於設計的限制,對象的多態性失敗了:原生的C ++ wx類除了wx.ListItem
什么也wx.ListItem
,它肯定只會將wx.ListItem
返回給wxPython。
因此,我的“解決方案”是導出wx.ListCtrl
而不是wx.ListItem
,存儲所需信息並控制那里的外觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.