PySide多重继承:继承QWidget和Mixin

时间:2014-08-18 22:31:19

标签: python inheritance pyside multiple-inheritance

我试图创建一组继承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

窗口小部件:

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

这不会奏效,但通过作曲来实现这一目标

小工具(组合):

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

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

1 个答案:

答案 0 :(得分:3)

保留class Widget(Mixin, QtGui.Widget):,但在super中添加Mixin.__init__来电。这应该确保调用__init__Mixin的{​​{1}}方法,并且首先在MRO中找到QWidget方法的Mixin实现setLayout

Widget