keyboard.hook_key() перестает отвечать на нажатия после какой-то ошибки. Только после компиляции в .exe

#python #keyboard #pyautogui #keyboard-hook

#python #клавиатура #pyautogui #клавиатура-хук

Вопрос:

Проблема появляется только после компиляции в .exe: в строке keyboard.hook_key ('f7', TranslateAll, suppress = True) при нажатии F7 вызывает функцию TranslateAll . Алгоритм функции:

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

Все работает нормально, однако после компиляции в .exe после 10 вызовов функций keyboard.hook_key() перестает отвечать.

Я пытался переназначить F7 при keyboard.hook_key () ошибке, но это тоже не сработало.

В чем может быть проблема?

Проблемная часть кода: (Вы можете попробовать запустить его, чтобы увидеть, как он работает, а затем использовать pyinstaller «NameOfCode.py » чтобы увидеть проблему, которую я описал)

 from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize
from googletrans import Translator
import keyboard
import googletrans
import pyperclip

count = 0                         #function operation counter

TranslateAll_count = 0            #variable, for single
                                  #triggering a function when a button is pressed

def TranslateAll(event):
    global TranslateAll_count
    global count
    TranslateAll_count  = 1
    if TranslateAll_count != 2:

        #main algorithm 

        translator = Translator()

        data = pyperclip.paste()

        result = translator.translate(data, dest='ru')

        pyperclip.copy(result.text)

        TranslateAll_count = 1
        count  = 1
        print(f'Actuation №{count}n')


class MainWindow(QMainWindow):
    def __init__(self):

        QMainWindow.__init__(self)
        self.setFixedSize(QSize(480, 180))
        self.setWindowTitle("test")

        #binding F7 to a function TranslateAll
        keyboard.hook_key('f7', TranslateAll, suppress=True)


if __name__ == "__main__":
    import sys
 
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())
  

Вывод при запуске файла .py:

 Actuation №1
Actuation №2
Actuation №3
Actuation №4
#until the user finishes work
  

Вывод при запуске .exe-файла:

 #7 Actuations
Actuation №8
#the function stops being called
  

Ответ №1:

Проблема была в строке вызова функции keyboard.hook_key('f7', TranslateAll, suppress=True)

Чтобы избавиться от проблемы, нужно было только изменить значение suppress параметра с True на False