WxPython: dériver wx.ListItem mais wx.ListCtrl ne retourne ancienne classe
Question
J'ai un petit problème avec les classes dérivées, à savoir wx.ListItem
avec wx.ListCtrl
. Je wx.ListItem
tirais avec succès en tant que MediaItem
, le code est terminé, mais vous obtenez le point:
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
accepte volontiers que du fait de la philosophie Pythons de canard. Mais maintenant, le problème est que l'utilisation de la méthode wx.ListCtrl.GetItem(index)
retourne un ListItem
, non MediaItem
. Python se plaignait de ne pas avoir un wx.ListItem
getFullname
d'attribut.
objets casting semble être la mauvaise façon d'aborder la solution. Cela n'a probablement rien à voir avec le problème, mais je coller la ligne incriminée comme est ainsi:
filename = self.filelist.GetItem(event.GetIndex()).getFullname()
Où self.filelist
est un wx.ListCtrl
.
La solution
Je suppose que je devrais juste sucer, et régressent à la comptabilité manuelle suboptimale. Lorsque vous avez terminé avec goût, ce n'est pas une grosse affaire, mais j'avais l'espoir plus élevés pour wxPython.
Soi-disant (de ce que je cherchais et collectionnais) la question est la nature proxy de base de classe wxPython. Ont-ils été écrits en Python pur, ou je codé en C ++, cela aurait bien fonctionné. Mais maintenant, le polymorphisme des objets échoue en raison de limitations dans la conception: le C ++ natif classe WX ne tirerez rien mais un wx.ListItem
et il va certainement revenir en arrière seulement de wx.ListItem
à wxPython.
Ma « solution » est donc à wx.ListCtrl
Derive au lieu de wx.ListItem
, de stocker les informations nécessaires et de contrôler les apparitions là.