Spi*_*ine 3 pyqt multiple-inheritance python-3.x
我想创建一个继承 QWidget 的两个子类的新类。我知道在 pyqt 中不可能进行多继承,但是我怎么能设法在一个子类中拥有两个父类的属性?
我希望我能做的如下:
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")
Run Code Online (Sandbox Code Playgroud)
我终于找到了怎么做:首先,问题来自A和QStatusBar继承QWidget。我们不能改变 QStatusBar,所以我们必须改变 A。A 不应该继承 QWidget:所以让我们创建另一个类,AInterface,像这样:
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()
Run Code Online (Sandbox Code Playgroud)
A 现在具有以下实现:
class A:
def __init__(self, widget):
a.widget = widget
a.interface = AInterface(self)
def handler(self):
pass
Run Code Online (Sandbox Code Playgroud)
因此,现在我们可以创建不仅继承 A 还继承任何 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)
Run Code Online (Sandbox Code Playgroud)
注意widget=widgetQStatusBar 的构造函数中的:如果我们不指定它,则会抛出 TypeError...
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |