Ich habe eine Dialogklasse, die eine pyside-uic-generierte Python-Klasse erbt, aber mein Problem ist, dass es nicht erweitert werden kann, indem ich eine andere Basisklasse hinzufüge.PySide, PysideUIC und multiple Vererbung
import sys
from PySide import QtGui
from mi_ui import Ui_Dialog
class Worker(object):
def __init__(self):
super(Worker, self).__init__()
self.data = 1
class MainDialog(QtGui.QDialog, Ui_Dialog, Worker):
def __init__(self):
super(MainDialog, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dlg = MainDialog()
print dlg.data
dlg.show()
sys.exit(app.exec_())
Wenn ich versuche, MainDialog
mit Worker
zu erweitern, super ruft nicht die Worker
‚s __init__
und der Druck dlg.data schlägt fehl, weil "Attribute: 'MainDialog 'data' Objekt keine Attribute hat'"
Meine einzige Arbeit herum scheint super zu ignorieren und jede __init__
manuell aufzurufen.
QtGui.QDialog.__init__(self)
Worker.__init__(self)
Ist das meine einzige Lösung?
Dies ist für Python 2.7.
Soweit es meine Erfahrung betrifft, funktioniert 'super()' nicht mit den PySide Wrappern zu Qt, und ich glaube nicht, dass PyQt hier anders ist. Es kann also der einzige Weg sein, die "__init__'s manuell aufzurufen. Achten Sie darauf, rautenförmige Erbschaften zu vermeiden (oder zu umgehen). – quazgar