3

我对派生类有一个小问题,wx.ListItemwx.ListCtrl. 我成功地导出wx.ListItem为 a 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很高兴接受这一点,因为 Python 的鸭子哲学。但现在的问题是,使用该方法wx.ListCtrl.GetItem(index)返回的是 a ListItem,而不是MediaItem。Python 抱怨wx.ListItem没有属性getFullname

铸造对象似乎是解决解决方案的错误方法。这可能与问题无关,但我也粘贴了有问题的行:

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

self.filelist一个在哪里wx.ListCtrl

4

1 回答 1

2

我想我应该把它吸干,然后退回到次优的手动簿记。如果做得有品位,这没什么大不了的,但我对 wxPython 抱有更高的希望。

据说(根据我搜索和收集的内容)问题在于 wxPython 类库的代理性质。如果它们是用纯 Python 编写的,或者我用 C++ 编写的,这会很好用。但是现在由于设计上的限制,对象的多态性失败了:原生 C++ wx 类除了 a 之外什么也得不到wx.ListItem,而且它肯定只会返回 awx.ListItem返回给 wxPython。

因此,我的“解决方案”是派生wx.ListCtrl而不是wx.ListItem存储所需的信息并控制那里的外观。

于 2010-07-01T13:22:21.943 回答