keyboard.on_press_key() перестает вызывать функцию после компиляции в .exe
keyboard.on_press_key('f7', TranslateAll, suppress=True) при нажатии на F7 вызывает функцию TranslateAll().
Алгоритм работы TranslateAll():
- Библиотека
pyperclipвытаскивает из буфера обмена текст - Библиотека
googletransпереводит текст 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 шт):
Итак, спустя 5 дней поиска решения проблемы ответ найден!
Проблема была в строке вызова функции keyboard.on_press_key('f7', TranslateAll, suppress=True)
Значение параметра suppress нужно было поменять с True на False.
Спасибо всем, кто пытался хоть как-то помочь :)