我在派生课上有一个小问题,即 wx.ListItemwx.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, ,存储所需的信息并控制那里的外观。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top