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

问题描述 投票:1回答:2

我正在使用此函数来等待用户输入(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太长,无法转换

有人有想法让它运行吗?

python keyboard wait
2个回答
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)


0
投票

这就是我在程序中的表现。它工作正常,并没有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
© www.soinside.com 2019 - 2024. All rights reserved.