【问题标题】:How to wait keyboard input without OverflowError如何在没有溢出错误的情况下等待键盘输入
【发布时间】:2019-02-12 21:56:48
【问题描述】:

我正在使用这个函数来等待用户输入(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 中的异常:

Traceback(最近一次调用最后一次):文件“threading.py”,第 916 行,在 _bootstrap_inner 文件“threading.py”,第 864 行,运行文件“lib\site-packages\keyboard__init__.py”,第 292 行,在监听文件中 “lib\site-packages\keyboard_winkeyboard.py”,第 560 行,在听
文件“lib\site-packages\keyboard_winkeyboard.py”,第 553 行,在 prepare_intercept ctypes.ArgumentError: argument 3: : int too long to convert

有人有想法让它运行吗?

【问题讨论】:

    标签: python keyboard wait


    【解决方案1】:

    这里有几个选项。第一个实际上非常简单,您所要做的就是强制 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 编译 32 位的命令吗?
    • @Izaya 是的,您只需更改用于构建它的 Python 版本。目前你可能使用 64 位 Python,下载一个 32 位版本并使用它来构建 pyinstaller
    【解决方案2】:

    这就是我在程序中的做法。它运行良好,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
    

    【讨论】:

    • 是的,它有效,但它并不是我真正想要的。目前我用 tkinter 创建了一个消息框是/否。
    • 您可以创建两个按钮,一个是是,一个是不是。一旦你弄清楚了你的 GUI 的其余部分,你可以回到这个并尝试解决问题。您可能最终决定根本不需要是/否选项。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多