WxPython: Ableiten wx.ListItem aber wx.ListCtrl gibt nur alte Klasse
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
.
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.