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.

È stato utile?

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'è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top