PyQt设计师推出了widget - 对顶级对象的引用?

时间:2016-12-24 04:42:56

标签: qt pyqt parent-child pyqt5 qt-designer

在Qt设计器中,我有一个自定义的graphicsView小部件,我将其提升为一个名为View的自定义类:

enter image description here

请注意,其父级为horizo​​ntalLayout。 pyuic的相应代码如下所示:

class Ui_panelFill(object):
    def setupUi(self, panelFill):
        panelFill.setObjectName("panelFill")
        panelFill.resize(1031, 702)
        self.centralwidget = QtWidgets.QWidget(panelFill)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 1001, 631))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.graphicsView = View(self.horizontalLayoutWidget)
        self.graphicsView.setObjectName("graphicsView")
        ...

程序的内容,例如所有重要的变量和方法,都在名为panelFill的顶级类中。

class panelFill(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        uic.loadUi("panelFill.ui",self)

        self.vertices=[[0,0],[0,120],[240,120],[240,0]]
        ...

如何从View类的方法引用顶点变量?我希望像self.parent.vertices这样的东西但是父亲不是panelFill对象,它是horizo​​ntalLayout。是否有像self.superduper()。vertices这样的东西来获取顶级父对象的属性而不是直接的父对象?

1 个答案:

答案 0 :(得分:1)

实际上,View的父级horizontalLayoutWidgetQWidget - 所有小部件必须将另一个小部件作为父级。

要获取层次结构中的顶级窗口小部件,可以使用图形视图窗口小部件的window()方法。这个方法简单地使用parentWidget()走向祖先链,直到它找到一个没有父节点的小部件 - 根据定义,它必须是顶级小部件(即你的主窗口)。