PySide在其层次结构中的任何位置获取QObject的父级

2024-05-15 23:46:20 发布

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

假设我有一个具有这种结构的类(CustomClass可能/不在层次结构的顶部):

CustomClass

.. QTabWidget

.... QWidget

...... QTreeView

QTreeView中,我有一个函数试图回引用CustomClass。现在我要做的是:self.parent().parent().parent()。在

虽然这样做很管用,但感觉很马虎,如果我需要改变结构,这将失败。有没有其他方法可以得到CustomClass?通常我会在它的构造函数期间传递它的一个实例,我可以直接调用它,但是我想知道最好的做法是什么。在


Tags: 实例方法函数self层次结构结构parent我会
2条回答

这似乎是一种得体的程序方法:

customClassInst = self.parent()
while customClassInst is not None and type(customClassInst) != CustomClass:
    customClassInst = customClassInst.parent()

欢迎任何其他答案:)

这个问题的标题引出了一个非常直接的答案。QWidget上的window()方法返回具有(或可能具有)窗口系统框架的祖先小部件:通常是要查找的“顶级”小部件。文档将更改窗口标题作为规范用例:

self.window().setWindowTitle(newTitle)

如果Qwidget是窗口本身,则返回self。在

但是,您的问题文本和您自己的答案给出了另一种解释:您可能希望找到属于特定类型的祖先,即使它不是顶级小部件。在这种情况下,迭代祖先通常是正确的解决方案,这与您自己编写的非常相似。所以应该是这样的:

^{pr2}$

请注意,您通常应该使用isinstance,而不是{},因为前者正确地处理子类。在

还请注意,如果没有找到None,则此代码将返回None,这可能是也可能不是您想要的。。。在

相关问题 更多 >