Wxpython: derivar wx.ListItem pero wx.ListCtrl sólo devuelve la clase de edad
Pregunta
Tengo un pequeño problema con las clases derivadas, es decir, con wx.ListItem
wx.ListCtrl
. Yo con éxito derivé wx.ListItem
como MediaItem
, el código no está terminado, pero usted consigue el punto:
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
acepta de buena gana que, debido a la filosofía pitones pato. Pero ahora el problema es que con el método devuelve un wx.ListCtrl.GetItem(index)
ListItem
, no MediaItem
. Python se quejó de no tener un wx.ListItem
getFullname
atributo.
Conversión de objetos parece ser el camino equivocado para acercarse a la solución. Probablemente esto no tiene nada que ver con el problema, pero me pegue la línea en cuestión como es así:
filename = self.filelist.GetItem(event.GetIndex()).getFullname()
Cuando self.filelist
es un wx.ListCtrl
.
Solución
Creo que debería simplemente lo entiendan, y la regresión a la subóptima contabilidad manual. Cuando se hace con buen gusto, no es un gran problema pero no tenía mayores esperanzas para wxPython.
Se supone que (por lo que he buscado y recogido) el problema está en la naturaleza del proxy de la base de clase wxPython. Estaban escritos en Python puro, o codificados en C ++, esto hubiera funcionado bien. Pero ahora el polimorfismo de objetos falla debido a limitaciones en el diseño: la clase C ++ nativo wx no conseguirá otra cosa que un wx.ListItem
y sin duda va a devolver sólo una parte posterior wx.ListItem
a wxPython.
Mi "solución" por lo tanto es wx.ListCtrl
derivan en lugar de wx.ListItem
, almacenan la información necesaria y controlar las apariciones allí.