keyboard.on_press_key() перестает вызывать функцию после компиляции в .exe

keyboard.on_press_key('f7', TranslateAll, suppress=True) при нажатии на F7 вызывает функцию TranslateAll().

Алгоритм работы TranslateAll():

  1. Библиотека pyperclip вытаскивает из буфера обмена текст
  2. Библиотека googletrans переводит текст
  3. pyperclip вставляет обратно в б/о переведенный текст

Все отлично работает, однако, после компиляции в .exe, после ~10 вызовов функции, keyboard.on_press_key() перестает реагировать на нажатия или же вызывать функцию. Причем это не сопровождается какими-либо сообщениями в консоли. Просто нажимаю F7 и все - никаких ошибок.

!!! Проблема появляется только при работе с переводчиком googletrans, если отбросить его и оставить только работу с буфером обмена, то проблема уйдет!

Пробовал указывать код клавиши, вместо 'f7' - проблема осталась.

Я также пробовал заново назначать F7 в keyboard.hook_key() при ошибке (оборачивал алгоритм в try-except), но это тоже ничего не дало.

Код: Здесь все работает как надо, но если скомпилировать (pyinstaller PythonCode.py), то можно увидеть описанную мной проблему.

from googletrans import Translator
import keyboard
import googletrans
import pyperclip
 
count = 0                         #счетчик срабатываний функции
 
def TranslateAll(event):
    global count
    #основной алгоритм 
    translator = Translator()
    data = pyperclip.paste()
    result = translator.translate(data, dest='ru')
    pyperclip.copy(result.text)

    count += 1
    print(f'Срабатывание №{count}\n')

    
#привязка F7 к функции
keyboard.on_press_key('f7', TranslateAll, suppress=True)
keyboard.wait()

Готовый проблемный .exe-файл также можно скачать с моего гугл диска: PythonCode.exe

Также имеется видео с подробным обзором на проблему: видео


Ответы (1 шт):

Автор решения: denisnumb

Итак, спустя 5 дней поиска решения проблемы ответ найден! Проблема была в строке вызова функции keyboard.on_press_key('f7', TranslateAll, suppress=True)

Значение параметра suppress нужно было поменять с True на False.

Спасибо всем, кто пытался хоть как-то помочь :)

→ Ссылка