Python 3.x pyqt5与多重遗传
我想创建一个继承QWidget的两个子类的新类。我知道在pyqt中不可能有多重继承,但是我怎样才能在一个子类中同时拥有两个父类的属性呢 我希望我能做的是:Python 3.x pyqt5与多重遗传,python-3.x,pyqt,multiple-inheritance,Python 3.x,Pyqt,Multiple Inheritance,我想创建一个继承QWidget的两个子类的新类。我知道在pyqt中不可能有多重继承,但是我怎样才能在一个子类中同时拥有两个父类的属性呢 我希望我能做的是: class A(QWidget): def __init__(self, widget, parent=None): widget.destroyed.connect(self.destroy_handler) @pyqtSlot() def destroy_handler(self):
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")
我终于找到了方法:首先,问题来自于继承QWidget的A和QStatusBar。我们不能改变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()
A现在有以下实施:
class A:
def __init__(self, widget):
a.widget = widget
a.interface = AInterface(self)
def handler(self):
pass
因此,现在我们可以创建子类,不仅继承一个QObject,还继承任何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)
请注意QStatusBar构造函数中的
widget=widget
:如果我们不指定它,就会抛出一个TypeError…我有一个稍微不同的情况,在使用多重继承时,QtObjects吞并所有同级类的参数似乎有问题。编辑:这似乎是有意的:也遇到了这个。我扩展了一个基本的小部件:classspeciallabel(QLabel,OtherClass)
,并不断因缺少参数而出错。原来QLabel
试图调用OtherClass
的构造函数。通过使用它并命名参数来修复它。在SpecialLabel.\uuuuu init\uuuuuuu
中:super()。\uuuu init\uuuuuu(其他参数=其他参数,*args,**kwargs)
。这调用了QLabel.\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。