首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用pywinauto在ListBox中检查/取消检查项?

如何使用pywinauto在ListBox中检查/取消检查项?
EN

Stack Overflow用户
提问于 2020-08-29 23:02:42
回答 2查看 723关注 0票数 2

我正在尝试使用pywinauto自动化Cambium LINKPlanner应用程序,并找到了几乎所有我需要的控件。但是,有一个复选列表框,其中包含标识符“ListBox”,并且似乎没有任何方法来选中/取消选中列表中的项。

我可以列出ListBox的内容:

代码语言:javascript
运行
复制
>>> app.LINKPlanner.ListBox.item_texts()
['PMP 450b High Gain', 'PMP 450b Mid-gain', 'PMP450 (retired)', 'PMP450d (retired)', 'PMP450i', 'PMP450i ATEX/HAZLOC']

我可以按名称或位置高亮显示ListBox中的项目:

代码语言:javascript
运行
复制
>>> app.LINKPlanner.ListBox.select('PMP450i')
<win32_control.ListBoxWrapper - '', ListBox, 70154>
>>> app.LINKPlanner.ListBox.select(2)
<win32_control.ListBoxWrapper - '', ListBox, 70154>

但我不能选中/取消选中列表项中的复选框。

有什么建议吗?

编辑:

使用Vasily的建议,我能够看到边界框,然后使用click_input单击复选框。

代码语言:javascript
运行
复制
>>> app.LINKPlanner.ListBox.select('PMP 450b High Gain').item_rect(0)
<RECT L0, T0, R276, B17>
>>> app.LINKPlanner.ListBox.select('PMP 450b High Gain').click_input(coords=(9,9))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-31 14:21:46

如果被检测为ListBox,则可能是所有者绘制的复选框,无法单独检测。我建议使用.item_rect(item_name)方法,然后使用.click_input()方法。此外,方法.client_to_screen()可能是有帮助的。

票数 3
EN

Stack Overflow用户

发布于 2021-08-20 10:21:50

我正在使用.select("item text").send_keys("{SPACE}")

我试过Vasily的答案使用item_rect()。这是可行的,但也有一些缺点。

在我的例子中,item_rect是不可靠的:它总是比现实高出2到4个像素。对于连续项,此错误加在一起。我的脚本最后点击了错误的复选框。

此外,如果列表太长,则需要滚动。这需要一个单独的解决办法。

我发现我的ListBox会在空格键下切换复选框。

所以我要做的是:

代码语言:javascript
运行
复制
# De-select all (there is a button to do this).
dialog.window(title="Deselect all").click()

# Select the desired items.
for item in ["Item 1 name", "Item 5 name"]:
   dialog.ListBox.select(item)
   dialog.ListBox.type_keys("{SPACE}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63652552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档