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

如何使用pywinauto导出TreeView控件的全部子项内容

pywinauto导出TreeView所有子项实现方案

核心思路

TreeView是层级结构控件,通过递归遍历所有TreeItem类型的子节点即可获取全量条目,遍历前优先展开节点,避免折叠状态下UIA无法识别子节点。

完整实现代码

from pywinauto import Application
import time

# 替换为你的目标程序路径
PathApp = "xxx.exe"
# 注意:原代码connect中传入class_name='TreeView'是错误的,connect用于匹配进程/顶层窗口,TreeView是子控件不能在这里指定
app = Application(backend="uia").connect(path=PathApp)

# 先定位TreeView所属的顶层窗口,title_re按你的实际窗口标题关键词修改
main_window = app.window(title_re=".*你的窗口标题关键词.*")
# 定位目标TreeView控件
tree_view = main_window.child_window(class_name="TreeView", control_type="Tree")

# 递归遍历节点的函数
def traverse_node(node, res_list, level=0):
    # 存储当前节点层级和文本
    node_text = node.window_text()
    res_list.append((level, node_text))
    # 展开节点,确保子节点可被识别
    if not node.is_expanded():
        try:
            node.expand()
            time.sleep(0.1)
        except:
            # 叶子节点无展开能力,直接跳过
            pass
    # 递归遍历所有子节点
    for child in node.children(control_type="TreeItem"):
        traverse_node(child, res_list, level+1)

# 执行遍历
all_tree_items = []
for root_node in tree_view.children(control_type="TreeItem"):
    traverse_node(root_node, all_tree_items)

# 打印结果(带树形缩进)
for level, text in all_tree_items:
    print(f"{'  '*level}{text}")

# 导出到本地文件
with open("treeview导出结果.txt", "w", encoding="utf-8") as f:
    for level, text in all_tree_items:
        f.write(f"{'  '*level}{text}\n")

注意事项

  • 定位TreeView时如果class_name="TreeView"匹配失败,可以替换为仅用control_type="Tree"适配不同技术框架实现的树形控件
  • 如果出现节点遗漏的情况,可以适当调大节点展开后的sleep等待时长,或者给节点增加node.wait('ready', timeout=3)的等待逻辑
  • 不需要保留树形层级的话,可以删除level相关逻辑,直接存储节点文本即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:00