You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pywinauto控制UpDown spinner控件?报错求助

Fixing UpDown Spinner Control with pywinauto

1. Resolve ElementNotFoundError

Your first error stems from using an incorrect auto_id in the code. The control info shows the spinner's auto_id is 68226, but your initial code uses 7995854. Correcting this will let pywinauto locate the control properly.

2. Fix NoPatternInterfaceError

UpDown controls typically expose the RangeValue pattern instead of the Value pattern. Use iface_range_value to access and modify the control's value:

Working Code Example

from pywinauto.application import Application

app = Application("uia").start('smcg2gui.exe')
main_window = app.PololuSimpleMotorControlCenterG2

# Wait for the window to load completely (prevents timing issues)
main_window.wait('ready')

# Control the Stop motor button (already functional)
stop_motor = main_window.child_window(title="Stop motor", auto_id="stopMotorButton", control_type="Button")

# Locate the spinner with the correct auto_id
speed_controller = main_window.child_window(title="Spinner", auto_id="68226", control_type="Spinner")

# Retrieve current spinner value
current_value = speed_controller.iface_range_value.CurrentValue
print(f"Current spinner value: {current_value}")

# Set a new value (ensure it falls within the control's min/max range)
speed_controller.iface_range_value.SetValue(50)

stop_motor.click()
print("done")

Alternative Methods if RangeValue Pattern Fails

If the above approach doesn't work, try these workarounds:

Option 1: Simulate Up/Down Button Clicks

Manually click the spinner's up/down arrows to adjust values:

# Click the up arrow (adjust coordinates based on your control's size)
speed_controller.click_input(button='left', coords=(10, 5))
# Click the down arrow
speed_controller.click_input(button='left', coords=(10, 15))

Option 2: Interact with the Linked Edit Control

Most spinners are paired with an Edit control. Locate it using print_control_identifiers() and set its text directly:

# Uncomment to list all control identifiers and find the Edit control
# main_window.print_control_identifiers()

speed_edit = main_window.child_window(auto_id="YOUR_EDIT_AUTO_ID", control_type="Edit")
speed_edit.set_text("75")
speed_edit.type_keys("{ENTER}") # Confirm the input

Key Notes

  • Always use print_control_identifiers() to verify control details like auto_id and title.
  • Add window waits (wait('visible') or wait('ready')) to avoid issues with unloaded UI elements.

内容的提问来源于stack exchange,提问作者Omer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:15:33