PySide多重继承:继承QWidget和Mixin

2024-04-27 00:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一组继承QWidget、QMainWindow和QDialog的PySide类。另外,我想继承另一个类来覆盖一些函数,并设置小部件的布局。在

示例:

混音:

class Mixin(object):
    def __init__(self, parent, arg):
        self.arg = arg
        self.parent = parent

        # Setup the UI from QDesigner
        ui = Ui_widget()
        ui.setupUi(self.parent)

    def setLayout(self, layout, title):
        self.parent.setWindowTitle(title)
        self.parent.setLayout(layout)

    def doSomething(self):
        # Do something awesome.
        pass

小工具:

^{pr2}$

这是行不通的,但是通过写作来完成

小工具(组成):

class Widget(QtGui.QWidget):
    def __init__(self, parent, arg):
        super(Widget, self).__init__(parent=parent)
        mixin = Mixin(parent=self, arg=arg)

        self.setLayout = mixin.setLayout
        self.doSomething = mixin.doSomething

我想尝试让小部件继承所有内容,而不是通过组合完成一部分。谢谢!在


Tags: selfuititleinit部件defargmixin
1条回答
网友
1楼 · 发布于 2024-04-27 00:51:34

保留class Widget(Mixin, QtGui.Widget):,但在Mixin.__init__中添加一个super调用。这应该确保MixinQWidget__init__方法都被调用,并且setLayout方法的Mixin实现首先在Widget的MRO中找到。在

class Mixin(object):
    def __init__(self, parent=None, arg=None):
        super(Mixin, self).__init__(parent=parent)  # This will call QWidget.__init__
        self.arg = arg
        self.parent = parent

        # Setup the UI from QDesigner
        ui = Ui_widget()
        ui.setupUi(self.parent)

    def setLayout(self, layout, title):
        self.parent.setWindowTitle(title)
        self.parent.setLayout(layout)

    def doSomething(self):
        # Do something awesome.
        pass


class Widget(Mixin, QtGui.QWidget):
    def __init__(self, parent, arg):
        super(Widget, self).__init__(parent=parent, arg=arg)  # Calls Mixin.__init__

相关问题 更多 >