使用pywinauto获取PyQt5应用控件标识符及访问问题
PyQt5应用控件识别问题(以Qt Designer为例)
问题情况
使用Python 3.10搭配pywinauto获取Qt Designer的控件标识符时,执行代码后仅能拿到Qt5QWindowIcon相关信息,无法访问具体控件。
原代码
from pywinauto.application import Application import os app = Application().start("C:/python/Lib/site-packages/QtDesigner/designer.exe") main_dlg = app.QtDesigner main_dlg.wait('visible') main_dlg.print_control_identifiers()
执行输出
Control Identifiers: Qt5QWindowIcon - 'Qt Designer' (L632, T250, R1928, B1008) ['Qt Designer', 'Qt DesignerQt5QWindowIcon', 'Qt5QWindowIcon'] child_window(title="Qt Designer", class_name="Qt5QWindowIcon")
解决方法
问题根源是pywinauto默认用win32 backend,它只能识别标准Windows原生控件,而PyQt5应用的控件属于Qt自定义体系,得切换到uia backend才能识别Qt对外暴露的UI自动化元素。
修改后的代码
from pywinauto.application import Application # 指定使用uia backend启动应用 app = Application(backend='uia').start("C:/python/Lib/site-packages/QtDesigner/designer.exe") # 通过标题精准定位主窗口 main_dlg = app.window(title="Qt Designer") main_dlg.wait('visible') # 打印所有可识别的控件标识符 main_dlg.print_control_identifiers()
说明
运行修改后的代码,就能看到菜单栏、工具栏、左侧控件面板、属性编辑器等所有具体控件的标识符。后续可以通过这些标识符定位并操作控件,比如点击菜单栏的「文件->新建」:
# 示例:点击文件菜单下的新建选项 main_dlg.menu_item("File->New").click()
内容的提问来源于stack exchange,提问作者Chris P
相关产品推荐
相关产品推荐

