wxpython:派生wx.listitem,但wx.listctrl仅返回旧类
题
我在派生课上有一个小问题,即 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)
返回a ListItem
, , 不是 MediaItem
. 。 Python抱怨 wx.ListItem
没有属性 getFullname
.
铸造对象似乎是处理解决方案的错误方法。这可能与问题无关,但是我也粘贴了有问题的线:
filename = self.filelist.GetItem(event.GetIndex()).getFullname()
在哪里 self.filelist
是一个 wx.ListCtrl
.
解决方案
我想我应该把它吸起来,然后退回到次优的手动簿记中。完成时,这没什么大不了的,但是我对Wxpython有更高的希望。
据说(根据我搜索和收集的内容)问题是WXPYTHON阶级基础的替代性质。如果他们用Pure Python编写,或者我用C ++编码,这将效果很好。但是现在由于设计的局限性,物体的多态性失败了:本机C ++ WX类除了 wx.ListItem
而且它肯定只会返回 wx.ListItem
回到wxpython。
因此,我的“解决方案”是为了得出 wx.ListCtrl
代替 wx.ListItem
, ,存储所需的信息并控制那里的外观。
不隶属于 StackOverflow