You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用QWidget的findChildren获取objectName含指定字符串的子部件

如何筛选QWidget中objectName含特定字符串的子部件

嘿,这事儿好办!Qt框架自带的findChildren()方法加上简单的过滤逻辑,就能轻松搞定你的需求。我给你一步步拆解:

1. 获取所有子部件(包括嵌套的)

首先,你可以用findChildren()获取目标父部件(也就是你的general_widget)下所有的子部件——不管是直接子部件还是嵌套在更深层级的:

from PyQt5.QtWidgets import QWidget

# 获取general_widget下所有QWidget类型的子部件
all_child_widgets = general_widget.findChildren(QWidget)

如果你的子部件都是特定类型(比如QLabel),也可以把QWidget换成QLabel,这样能缩小范围,效率更高。

2. 筛选符合条件的部件

接下来用列表推导式,根据objectName是否包含目标字符串来过滤:

筛选含"name"的部件

name_widgets = [widget for widget in all_child_widgets if "name" in widget.objectName()]

筛选含"id"的部件

id_widgets = [widget for widget in all_child_widgets if "id" in widget.objectName()]

3. 只获取直接子部件(排除嵌套)

如果你只想要general_widget的直接子部件,不需要深层嵌套的,可以给findChildren()加个参数:

from PyQt5.QtCore import Qt

# 只获取直接子部件
direct_child_widgets = general_widget.findChildren(QWidget, "", Qt.FindDirectChildrenOnly)

# 再分别筛选
direct_name_widgets = [w for w in direct_child_widgets if "name" in w.objectName()]
direct_id_widgets = [w for w in direct_child_widgets if "id" in w.objectName()]

进阶:用正则表达式匹配

如果你的匹配需求更复杂(比如要匹配特定格式的objectName),可以结合正则表达式:

import re

# 匹配包含"name"的objectName
name_pattern = re.compile(r"name")
name_widgets = [w for w in all_child_widgets if name_pattern.search(w.objectName())]

# 比如匹配"label_name_数字"这种格式
specific_name_pattern = re.compile(r"label_name_\d+")
specific_name_widgets = [w for w in all_child_widgets if specific_name_pattern.fullmatch(w.objectName())]

这样处理后,name_widgets和id_widgets就是你想要的对应部件列表啦!

内容的提问来源于stack exchange,提问作者laurapons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:54:18