keyboard.hook_key() 在出现某种错误后停止响应按键。仅在编译为 .exe 后
keyboard.hook_key() stops responding to presses after some kind of error. Only after compiling to .exe
问题仅在编译为 .exe 后出现:在行 keyboard.hook_key ('f7', TranslateAll, suppress = True)
中按 F7 调用函数 TranslateAll
。函数算法:
- 库
pyperclip
从剪贴板中提取文本
- 图书馆
googletrans
翻译文本
pyperclip
将翻译后的文本插入剪贴板
一切正常,但是,在编译为 .exe 后,在 10 次函数调用后,keyboard.hook_key()
停止响应。
我曾尝试在 keyboard.hook_key ()
中重新分配 F7 错误,但这也没有用。
可能是什么问题?
代码中有问题的部分:(您可以尝试运行看看它是否有效,然后使用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
问题出在函数调用行 keyboard.hook_key('f7', TranslateAll, suppress=True)
要解决这个问题,只需要将suppress
参数的值从 True
更改为False
问题仅在编译为 .exe 后出现:在行 keyboard.hook_key ('f7', TranslateAll, suppress = True)
中按 F7 调用函数 TranslateAll
。函数算法:
- 库
pyperclip
从剪贴板中提取文本 - 图书馆
googletrans
翻译文本 pyperclip
将翻译后的文本插入剪贴板
一切正常,但是,在编译为 .exe 后,在 10 次函数调用后,keyboard.hook_key()
停止响应。
我曾尝试在 keyboard.hook_key ()
中重新分配 F7 错误,但这也没有用。
可能是什么问题?
代码中有问题的部分:(您可以尝试运行看看它是否有效,然后使用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
问题出在函数调用行 keyboard.hook_key('f7', TranslateAll, suppress=True)
要解决这个问题,只需要将suppress
参数的值从 True
更改为False