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

如何获取sg.InputText输入并传入keyboard.press()?运行触发ValueError

问题解决:点击Run自动输入按键时的ValueError修复

错误原因

  1. pynput按键格式不匹配:keyboard.press()只接受单个字符(如'a'、'5')或Key类的特殊键实例(如Key.enter)。如果输入框填的是'enter'这类特殊键的字符串,直接传入会触发ValueError,因为pynput无法识别字符串形式的特殊键。
  2. 窗口提前关闭:原代码把window.close()放在循环内部,第一次点击按钮后窗口就会关闭,后续操作直接报错。
  3. 空输入判断逻辑错误:判断位置在press之后,而且错误判断values==None,应该先检查输入框内容是否为空。

修复后的代码

from pynput.keyboard import Key, Controller 
import PySimpleGUI as sg

# 特殊键映射:把输入的字符串对应到pynput的Key实例
SPECIAL_KEYS = {
    'enter': Key.enter,
    'backspace': Key.backspace,
    'tab': Key.tab,
    'space': Key.space,
    'shift': Key.shift,
    'ctrl': Key.ctrl,
    'alt': Key.alt,
    'caps_lock': Key.caps_lock,
    'esc': Key.esc,
    'up': Key.up,
    'down': Key.down,
    'left': Key.left,
    'right': Key.right
}

sg.theme('Black')
layout = [
            [sg.Text('Key To Click'), sg.InputText()],
            [sg.Button('Run'), sg.Button('Close Application')] ]
window = sg.Window('Macro', layout)

keyboard = Controller()

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'Close Application': 
        break
    
    input_key = values[0].strip()  # 获取输入并去除首尾空格
    print('You entered ', input_key)
    
    if event == 'Run':
        if not input_key:  # 检查输入是否为空
            print('Please Type A Letter or Special Key!')
            continue
        
        # 处理按键:先找特殊键,找不到就按普通字符处理
        try:
            key = SPECIAL_KEYS.get(input_key.lower(), input_key)
            keyboard.press(key)
            keyboard.release(key)  # 记得释放按键,避免一直按住
        except ValueError as e:
            print(f'Invalid key: {input_key}, error: {e}')

# 循环结束后再关闭窗口
window.close()

关键改动说明

  • 新增特殊键映射字典:把常用特殊键的字符串和Key实例对应,输入'enter'时自动转换成Key.enter。
  • 调整窗口关闭位置:window.close()移到循环外,确保窗口在程序结束时才关闭。
  • 修正空输入判断:先检查输入是否为空,为空直接提示不执行press操作。
  • 添加按键释放:调用keyboard.release(),避免按键被一直按住。
  • 异常捕获:用try-except捕获无效输入的错误,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:20:26