Как ждать ввода с клавиатуры без OverflowError - PullRequest
0 голосов
/ 07 сентября 2018

Я использую эту функцию для ожидания ввода пользователя (y для да, n для нет). Это удобно, потому что не нужно нажимать клавишу ввода, и я могу использовать его с графическим интерфейсом (без записи в консоли).

import keyboard

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

Но когда я компилирую его в исполняемый файл с PyInstaller, возникает эта ошибка: Исключение в потоке 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: аргумент 3:: int слишком длинный для преобразования

У кого-нибудь есть идея заставить его работать?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вот как я это сделал в своей программе. Он работал нормально и не имел проблем с 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
0 голосов
/ 07 сентября 2018

У вас есть несколько вариантов здесь. Первое, что на самом деле довольно просто, все, что вам нужно сделать, это заставить pyInstaller использовать 32-битный Python, а не 64-битную версию, которую он предположительно использует. Второй немного сложнее и включает в себя изменение исходного кода импорта клавиатуры. Перейдите к строке 555 keyboard_winkeyboard.py и замените 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)

...