如何在pyqt5中找到小部件的父TabPage?

how to find parent TabPage of widget in pyqt5?

我找到了用于查找子控件 的代码,但是我无法找到用于获取父控件的命令。

我创建了带有多个选项卡的 QTabWidget。在每个选项卡中我都有一些小部件。 我想突出显示给定小部件元素的标签页。

我创建了一个代码来实现这一点。它正在工作。但我觉得这不是直截了当的。你能提出更好的解决方案来实现同样的目标吗?

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

def color_parent_tab(widget,Tab):
    tabs={Tab.widget(i):i for i in range(Tab.count())}
    while widget!=None:
        try:
            if widget in tabs:
                Tab.tabBar().setTabTextColor(tabs[widget], QColor('red'))
            widget=widget.parent()
        except Exception as e:print(e)


if __name__ == '__main__':
    app = QApplication([])
    window=QTabWidget()

    w=QWidget()
    VL=QVBoxLayout(w)
    window.addTab(w,'tab1')

    L=QLabel('Label1')
    VL.addWidget(L)

    L2=QLabel('Label2')
    VL.addWidget(L2)

    w=QWidget()
    VL=QVBoxLayout(w)
    window.addTab(w,'tab2')

    L3=QLabel('Label1')
    VL.addWidget(L3)

    L4=QLineEdit()
    VL.addWidget(L4)

    color_parent_tab(L3,window)

    window.showMaximized()
    app.exec()

您可以使用 isAncestorOf,其中 returns True 如果参数中的小部件是子级(或孙级,任何级别):

def color_parent_tab(widget, Tab):
    for i in range(Tab.count()):
        if Tab.widget(i).isAncestorOf(widget):
            Tab.tabBar().setTabTextColor(i, QColor('red'))
            return