如何等待没有OverflowError的键盘输入

时间:2018-09-07 14:13:03

标签: python keyboard wait

我正在使用此功能等待用户输入(y表示是,n表示否)。之所以方便,是因为它不需要按Enter键,而且我可以在GUI中使用它(无需在控制台中编写)。

import keyboard

def WaitingForYOrN():
    while True:
        if keyboard.is_pressed("y"):
            return True
        elif keyboard.is_pressed("n"):
            return False

但是当我使用PyInstaller在exe文件中编译它时,会发生此错误: 线程Thread-1中的异常:

  

回溯(最近一次通话最后一次):文件“ threading.py”,行916,在   _bootstrap_inner运行文件“ lib \ site-packages \ keyboard__init __。py”中的文件“ threading.py”,第864行,侦听文件中的第292行   监听中的“ lib \ site-packages \ keyboard_winkeyboard.py”,第560行,
  文件“ lib \ site-packages \ keyboard_winkeyboard.py”,第553行,位于   prepare_intercept ctypes.ArgumentError:参数3::int太长而无法转换

有人想让它运行吗?

2 个答案:

答案 0 :(得分:0)

您在这里有两个选择。第一个实际上很简单,您所要做的就是强制pyInstaller使用32位Python,而不是假定使用的64位版本。第二个稍微复杂一点,涉及修改键盘导入的源代码。转到keyboard_winkeyboard.py第555行并替换 keyboard_hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboard_callback, GetModuleHandleW(None), None)keyboard_hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboard_callback, ctypes.c_ulonglong(GetModuleHandleW(None)), None)

答案 1 :(得分:0)

这就是我在程序中的操作方式。一切正常,并且pyinstaller没问题。

arguments:
     $request: '@=service("request_stack").getCurrentRequest()'