WxPython: derivante wx.ListItem ma wx.ListCtrl restituisce solo vecchia classe
Domanda
Ho un piccolo problema con le classi derivate, vale a dire con wx.ListItem
wx.ListCtrl
. Io con successo derivato wx.ListItem
come MediaItem
, il codice non è finito, ma si ottiene il 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
accetta volentieri che a causa della Pitoni filosofia anatra. Ma ora il problema è che utilizzando il metodo restituisce un wx.ListCtrl.GetItem(index)
ListItem
, non MediaItem
. Python lamentava wx.ListItem
non avere un getFullname
attributo.
Casting oggetti sembra essere il modo sbagliato di avvicinarsi alla soluzione. Questo probabilmente ha nulla a che fare con il problema, ma io incollare la linea incriminata come è così:
filename = self.filelist.GetItem(event.GetIndex()).getFullname()
Dove self.filelist
è un wx.ListCtrl
.
Soluzione
Credo che dovrei solo succhiare in su, e regresso alla contabilità manuale non ottimale. Una volta fatto con gusto, non è un grosso problema, ma ho avuto speranze più elevati per wxPython.
Si suppone (da quello che ho cercato e raccolto) il problema è con la natura delega della base di classe wxPython. Erano scritti in puro Python, o ho scritto in C ++, questo avrebbe funzionato bene. Ma ora il polimorfismo di oggetti non riesce a causa di limitazioni nel disegno: la classe C ++ nativo wx non otterrà nulla, ma un wx.ListItem
e certamente restituire solo una parte posteriore wx.ListItem
a wxPython.
La mia "soluzione" è quindi quello di wx.ListCtrl
derivano invece di wx.ListItem
, negozio necessaria informazione e controllo delle apparenze c'è.