PyQt 设计器提升的小部件 - 对顶级对象的引用?

PyQt designer promoted widget - reference to top level object?

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

注意它的父元素是 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 中。

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

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

如何从视图的方法中引用顶点变量 class?我希望得到类似 self.parent.vertices 的东西,但是可惜父级不是 panelFill 对象,它是 horizo​​ntalLayout。是否有类似 self.superduper().vertices 的东西来获取顶级父对象而不是直接父对象的属性?

实际上,您的 View 的父级是 horizontalLayoutWidget,这是一个 QWidget - 所有小部件都必须有另一个小部件作为父级。

要获取层次结构中的顶级小部件,您可以使用 window() method of your graphic-view widget. This method simply walks up the ancestor chain using parentWidget() 直到它找到没有父级的小部件 - 根据定义,它必须是顶级小部件(即您的主要window).