我正在尝试使用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']
我可以按名称或位置高亮显示ListBox中的项目:
>>> app.LINKPlanner.ListBox.select('PMP450i')
<win32_control.ListBoxWrapper - '', ListBox, 70154>
>>> app.LINKPlanner.ListBox.select(2)
<win32_control.ListBoxWrapper - '', ListBox, 70154>
但我不能选中/取消选中列表项中的复选框。
有什么建议吗?
编辑:
使用Vasily的建议,我能够看到边界框,然后使用click_input单击复选框。
>>> 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))
发布于 2020-08-31 14:21:46
如果被检测为ListBox,则可能是所有者绘制的复选框,无法单独检测。我建议使用.item_rect(item_name)
方法,然后使用.click_input()
方法。此外,方法.client_to_screen()
可能是有帮助的。
发布于 2021-08-20 10:21:50
我正在使用.select("item text")
和.send_keys("{SPACE}")
。
我试过Vasily的答案使用item_rect()
。这是可行的,但也有一些缺点。
在我的例子中,item_rect
是不可靠的:它总是比现实高出2到4个像素。对于连续项,此错误加在一起。我的脚本最后点击了错误的复选框。
此外,如果列表太长,则需要滚动。这需要一个单独的解决办法。
我发现我的ListBox
会在空格键下切换复选框。
所以我要做的是:
# 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}")
https://stackoverflow.com/questions/63652552
复制相似问题