Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x pyqt5与多重遗传_Python 3.x_Pyqt_Multiple Inheritance - Fatal编程技术网

Python 3.x pyqt5与多重遗传

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):

我想创建一个继承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")

我终于找到了方法:首先,问题来自于继承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。