#python #keyboard #pyautogui #keyboard-hook
#python #клавиатура #pyautogui #клавиатура-хук
Вопрос:
Проблема появляется только после компиляции в .exe: в строке keyboard.hook_key ('f7', TranslateAll, suppress = True)
при нажатии F7 вызывает функцию TranslateAll
. Алгоритм функции:
- Библиотека
pyperclip
извлекает текст из буфера обмена - Библиотека
googletrans
переводит текст 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