可以使用哪些win32调用来全局检测按键事件(不仅仅是1个窗口,我希望每次按下一个键时都会收到消息),来自Windows服务?
这是一个基于 ekhumoro在这里和这里的回答的后续问题。
我想明白,当一个插槽被正确定义pyqtSlot并分配给QThread(例如 with moveToThread())时,它将在这个 QThread 中执行,而不是在调用者中执行。此外,还需要与Qt.QueuedConnection或进行连接Qt.AutoConnection。
我写了代码来测试这个。我的目标是实现一些非常简单的东西:

带有按钮的 GUI,它开始一些耗时的工作并返回结果以显示在 GUI 中。
from PyQt5.Qt import *
class MainWindow(QMainWindow):
change_text = pyqtSignal(str)
def __init__(self):
super().__init__()
self.button = QPushButton('Push me!', self)
self.setCentralWidget(self.button)
print('main running in:', QThread.currentThread())
thread = Thread(change_text, self)
thread.start()
self.button.clicked.connect( thread.do_something_slow, Qt.QueuedConnection)
self.change_text.connect(self.display_changes, Qt.QueuedConnection)
@pyqtSlot(str)
def display_changes( self, text ):
self.button.setText(text)
class Thread(QThread):
def __init__(self, signal_to_emit, parent):
super().__init__(parent)
self.signal_to_emit = signal_to_emit
#self.moveToThread(self) #doesn't help
@pyqtSlot()
def do_something_slow( …Run Code Online (Sandbox Code Playgroud)