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.

¿Fue útil?

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top