2015-04-19 180 views
2

我想創建一個繼承QWidget的兩個子類的新類。我知道pyqt中的多重繼承是不可能的,但我怎樣才能設法在一個子類中擁有父類的屬性?pyqt5和多重繼承

我希望我能夠做的是如下:

class A(QWidget): 

    def __init__(self, widget, parent=None): 
     widget.destroyed.connect(self.destroy_handler) 

    @pyqtSlot() 
    def destroy_handler(self): 
     pass 

class B (A, QStatusBar): 
    def __init__(self, widget, parent=None): 
     A.__init__(self, widget) 
     QStatusBar.__init__(self, parent) 

    @pyqtSlot() 
    def destroyed_handler(self): 
     print("Destroyed") 

回答

2

我終於找到了如何做到這一點:首先,這些問題從A和QStatusBar來繼承QWidget的。我們不能改變QStatusBar,所以我們必須換A. A不應繼承了QWidget:讓我們創建另一個類,A接口,這樣的:

class AInterface(QObject): 
    def __init__(self, a, parent=None) 
     super().__init__(parent=parent) 
     self.a = a 
     self.connect_signal() 

    def connect_signal(self, widget): 
     widget.destroyed.connect(self.handler) 

    @pyqtSlot() 
    def handler(self): 
     self.a.handler() 

A現在具有以下實現:

class A: 
    def __init__(self, widget): 
     a.widget = widget 
     a.interface = AInterface(self) 

    def handler(self): 
     pass 

因此,現在我們可以創建子類繼承不僅是而且任何QObject的,就像這樣:

class B(QStatusBar, A): 
    def __init__(self, widget, parent=None): 
     QStatusBar.__init__(self, parent=parent, wiget=widget) 
     A.__init__(self, widget) 

    def handler(self): 
     self.show('Destroyed', 3000) 

注意的widget=widget在QSTATUS的構造如果我們不指定它,會引發TypeError ...

+0

我有一個稍微不同的情況,它看起來像使用多繼承時QtObjects吞嚥所有兄弟類的參數的一些問題。編輯:這似乎是打算:http://pyqt.sourceforge.net/Docs/PyQt5/multiinheritance.html – krassowski