我有一個對話框類繼承了pyside-uic生成的python類,但我的問題是它無法擴展我添加另一個基類。PySide,PysideUIC和多繼承
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_())
當我嘗試用Worker
延長MainDialog
,超級不叫Worker
的__init__
因爲打印dlg.data失敗‘AttributeError的:‘MainDialog’對象有沒有屬性‘數據’’
我唯一的工作似乎忽略超級,並手動調用每個__init__
。
QtGui.QDialog.__init__(self)
Worker.__init__(self)
這是我唯一的解決方案嗎?
這是針對Python 2.7的。
就我的經驗而言,'super()'不適用於Qt的PySide包裝器,我不認爲PyQt在這裏有什麼不同。所以手動調用'__init__'可能是你唯一的方法。只要確保避免(或繞過)菱形遺產。 – quazgar