【问题标题】:Checking a checkbox with pywinauto doesn't work使用 pywinauto 检查复选框不起作用
【发布时间】:2015-07-03 18:02:10
【问题描述】:

我从 pip 安装了最后一个 pywinauto 模块。
我不知道如何使用 Check()、UnCheck()、GetCheckState() 方法。

这是我非常简单的代码示例。

from pywinauto import application

# Start the madvr settings application.
app = application.Application()
app.start_(r'C:\Program Files\LAV Filters\x86\madVR\madHcCtrl.exe editLocalSettingsDontWait')

# Handle the madvr settings window.
madvr = app.window_(title_re="madVR.*")

# Enable the smooth motion tab.
madvr.TreeView.GetItem(r'\rendering\smooth motion').Click()

# Check the smooth motion checkbox.
madvr.TCheckBox.Check()

如果我使用 Click() 方法,它可以工作,但这不是我想要的。

madvr.TCheckBox.Click()

如果复选框已被选中,则取消选中它。

为什么我不能使用 Check() 方法?
我尝试了 Uncheck() 和 GetCheckState() 方法,它们也没有用。

【问题讨论】:

  • 可能您的 madHcCtrl.exe 仅处理用于更改状态的 WM_CLICK 事件。这是很常见的情况。如果是,还有另一种选择:CheckByClick 和 UncheckByClick。
  • 也不行。我有这个错误:AttributeError: 'HwndWrapper' object has no attribute 'CheckByClick'
  • 哦,看来这个控件被检测为不是复选框。还请提供madvr.TCheckBox.Class() 返回值。它可能有助于在 pywinauto 0.5.1 中解决此问题。
  • 返回:'TCheckBox'.

标签: user-interface python-3.x microsoft-ui-automation pywinauto


【解决方案1】:

我添加了"TCheckBox" 类名以在 0.5.1 中进行正确的复选框检测(将于本周发布)。感谢您的用例。目前您可以解决它(代码已更新为 pywinauto==0.6.x):

from pywinauto.controls.win32_controls import ButtonWrapper
checkbox = ButtonWrapper(madvr.TCheckBox.wrapper_object())
checkbox.get_check_state()

【讨论】:

    【解决方案2】:

    试试这个:

    使用get_toggle_state()

    checkbox = ButtonWrapper(madvr.TCheckBox.wrapper_object())
    checkbox.get_toggle_state()
    

    【讨论】:

    • get_toggle_state() 来自 3 年前不存在的 UIA 后端(问题太老了)。
    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多