【问题标题】:Python check if Checkbox in Application is checkedPython检查是否选中了应用程序中的复选框
【发布时间】:2021-03-17 08:06:43
【问题描述】:

我目前正在尝试自动化安装过程,我正在使用 pywinautogui。我想检查一个复选框是否被选中(实际上是一个按钮),因为在某些情况下,复选框已经被选中,如果我再次按下它,它会取消选中它。有什么办法可以弄清楚状态吗?

app = Application().Start(cmd_line=u'installer.exe')
windowsformswindowappbarad = app[u'Installer']
windowsformswindowappbarad.wait('ready')
windowsformsbuttonappbarad = windowsformswindowappbarad.Button4
#print(checkbox.get_click_state())
windowsformsbuttonappbarad.click()

this is how the Checkbox looks like

编辑:

app = Application().Start(cmd_line=u'installer.exe')
windowsformswindowappbarad = app[u'Installer']
windowsformswindowappbarad.set_focus()
windowsformswindowappbarad.wait('ready')
checkbox_object = windowsformswindowappbarad.Button4()

if checkbox_object.get_toggle_state() == 0:
    print("not set")
elif checkbox_object.get_toggle_state() == 1:
    print("ein")

【问题讨论】:

  • 认为你需要checkbox.get_check_state() 见:stackoverflow.com/questions/31212228/…
  • 我之前确实检查过这篇文章,但似乎 checkbox.get_check_state() 的值没有改变。如果复选框被点击它的“0”,如果它没有点击它的“0”
  • 您确定您选择了正确的复选框吗?
  • 是的,我用 swapy 找到了它,所以它应该是正确的

标签: python user-interface pywinauto


【解决方案1】:

通过下面的代码,你可以得到复选框的状态。

Checkbox_object = window_object.wrapper_object()
 if checkbox_object.get_toggle_state() == 0:
            return False
 elif checkbox_object.get_toggle_state() == 1:
            return True

如果您遇到问题,请告诉我。

下面是我试过的代码:

from pywinauto.application import Application

app1 = Application(backend='uia').connect(title="H4)")
app1.H4.set_focus()
checkboxobject=app1.Dialog.CheckBox0
value=checkboxobject.get_toggle_state()
print(value)

如果值为0,则不选中复选框,如果值为1,则选中

【讨论】:

  • 我试过这个,我现在真的很困惑,因为如果使用窗口的对象,我会得到 AttributeError: 'DialogWrapper' object has no attribute 'get_toggle_state' 如果我使用按钮的对象,我会得到相同的属性错误,但带有“ButtenWrapper”
  • 你能贴出你用这个试过的代码吗?
  • 我相信Button4()是UI对象的别名。那么你可以删除代码中的() 并尝试吗?
  • 这对我有用,我知道为什么但是 Application(backend='uia') 解决了问题,谢谢
【解决方案2】:

有时 get_toggle_state()、get_check_state() 或 is_checked() 方法不起作用。在这些情况下,唯一的方法是使用:

wrapper.legacy_properties()['State']

您可以在 Legacy|Accessible.State 中使用 inspect.exe 检索状态值

【讨论】:

  • checkbox = ButtonWrapper(windowsformsbuttonappbarad.wrapper_object()) checkbox.legacy_properties()['State'] 我不知道如何使用它,因为 ButtonWrapper 没有那个属性,你能解释一下吗?
  • 当您的复选框被选中然后未选中时,您是否尝试打印 windowsformsbuttonappbarad.wrapper_object().legacy_properties()['State'] 的值?
  • 是的,但我收到此错误消息 AttributeError: 'ButtonWrapper' object has no attribute 'legacy_properties'
  • 你能看到带有 inspect.exe 的 Legacy|Accessible.State 吗?
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 2013-10-28
  • 2013-01-04
  • 2018-03-27
  • 2012-07-13
  • 2016-04-22
相关资源
最近更新 更多