Frage

Ich habe ein kleines Problem mit abgeleiteten Klassen bekommt, nämlich wx.ListItem mit wx.ListCtrl. I erfolgreich wx.ListItem als MediaItem abgeleitet, der Code nicht fertig ist, aber Sie erhalten den Punkt:

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 gerne akzeptiert, dass wegen der Pythons Ente Philosophie. Aber jetzt das Problem ist, dass die Methode wx.ListCtrl.GetItem(index) Verwendung gibt ein ListItem, nicht MediaItem. Python beschwerten sich über wx.ListItem ein Attribut getFullname nicht mit.

Objekte Casting scheint der falsche Weg, um die Lösung zu nähern. Dies hat wahrscheinlich nichts mit dem Problem zu tun, aber ich füge Sie die Codezeile als auch ist:

filename = self.filelist.GetItem(event.GetIndex()).getFullname()

Wo self.filelist ist ein wx.ListCtrl.

War es hilfreich?

Lösung

Ich glaube, ich sollte es einfach aufzusaugen und Regress auf die suboptimale manuelle Buchhaltung. Wenn geschmackvoll gemacht, es ist keine große Sache, aber ich hatte höhere Hoffnungen für wxPython.

Angeblich soll (von dem, was ich gesucht und gesammelt) das Problem mit dem Proxy-Charakter der WxPython Klasse Base ist. Wurden sie in reinem Python geschrieben, oder ich in C ++ codiert, wäre dies gut gearbeitet haben. Aber jetzt ist der Polymorphismus von Objekten nicht aufgrund von Einschränkungen im Design: die native C ++ wx Klasse wird nichts bekommen, aber ein wx.ListItem und es wird sicherlich nur ein wx.ListItem zurück zu WxPython zurückzukehren.

Meine „Lösung“ ist somit herzuleiten wx.ListCtrl statt wx.ListItem, speichern benötigten Informationen und steuern die Erscheinungen gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top