如何用pywinauto在Cambium LINKPlanner的ListBox中勾选/取消勾选项?
解决pywinauto操作Cambium LINKPlanner带复选框ListBox的问题
问题场景
我在使用pywinauto自动化Cambium LINKPlanner应用时,碰到了一个带复选框的ListBox控件:已经能成功获取列表内容,也能通过名称或索引高亮选中列表项,但始终没法直接勾选/取消勾选列表项对应的复选框。
能正常执行的操作示例:
# 获取ListBox所有项的文本内容 >>> app.LINKPlanner.ListBox.item_texts() ['PMP 450b High Gain', 'PMP 450b Mid-gain', 'PMP450 (retired)', 'PMP450d (retired)', 'PMP450i', 'PMP450i ATEX/HAZLOC'] # 通过名称高亮选中指定项 >>> app.LINKPlanner.ListBox.select('PMP450i') <win32_control.ListBoxWrapper - '', ListBox, 70154> # 通过索引位置高亮选中项 >>> app.LINKPlanner.ListBox.select(2) <win32_control.ListBoxWrapper - '', ListBox, 70154>
解决方法
后来根据建议,通过获取列表项的边界矩形,再用click_input()模拟点击复选框所在区域的方式,成功解决了问题:
# 获取目标列表项的边界矩形信息 >>> app.LINKPlanner.ListBox.select('PMP 450b High Gain').item_rect(0) <RECT L0, T0, R276, B17> # 点击复选框所在的坐标位置(可根据实际界面调整coords数值) >>> app.LINKPlanner.ListBox.select('PMP 450b High Gain').click_input(coords=(9,9))
这类带复选框的ListBox大多属于自定义控件,pywinauto的标准ListBox方法无法直接识别内部的复选框元素,所以通过模拟真实用户点击复选框的坐标位置,就能完成勾选/取消勾选的操作。你可以根据自己界面里复选框的实际位置调整coords的数值——如果复选框在列表项左侧,通常取x坐标10左右、y坐标为项高度的中间值就比较可靠。
内容的提问来源于stack exchange,提问作者Rohan Mahy
相关产品推荐
相关产品推荐

