如何在没有OverflowError的情况下等待键盘输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有OverflowError的情况下等待键盘输入相关的知识,希望对你有一定的参考价值。

我正在使用此函数来等待用户输入(y表示是,n表示否)。它很方便,因为它不需要按回车键,我可以使用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文件“threading.py”,第864行,在运行文件“lib site-packages keyboard__init __。py”,第292行,在listen中文件“lib site-packages keyboard_winkeyboard.py”,第560行,在listen中 文件“lib site-packages keyboard_winkeyboard.py”,第553行,在prepare_intercept中ctypes.ArgumentError:参数3 :: int太长,无法转换

有人有想法让它运行吗?

答案

你有几个选择。第一个实际上非常简单,你所要做的就是强制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)

另一答案

这就是我在程序中的表现。它工作正常,并没有pyinstaller的问题。

print('Would you like to check somewhere else?')

print('[1] Yes')
print('[2] No')

variable1=int(input('Please enter choice: '))

if variable1 == 1:
    do this
elif variable1 == 0:
    do something else

以上是关于如何在没有OverflowError的情况下等待键盘输入的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 IdlingResource 的情况下在 Espresso 中等待异步任务

如何在没有“快速失败”行为的情况下并行等待多个承诺? [复制]

如何在没有 IllegalMonitorStateException 的情况下在 Java 中使用等待和通知?

如何修复 OverflowError:int64 加法中的溢出

如何在没有块等待安排的情况下最大限度地利用GPU?

如何在没有主键实体框架的情况下映射表