from PyQt5.QtCore import pyqtSignal, QThread import time from PyQt5.QtWidgets import QApplication class MyThread(QThread): signal_msg = pyqtSignal() def __init__(self): super().__init__() # self.signal_msg.connect(fd) self.signal_msg.connect(self.work) def run(self): self.signal_msg.emit() print("狗") def work(self): print(f"\ns") if __name__ == '__main__': print("a") my_thread = MyThread() my_thread.start() time.sleep(1) 为什么没有输出s
时间: 2024-03-30 15:36:54 浏览: 109
这是因为 `signal_msg` 信号在连接到 `work` 槽函数之前就被发射了,所以 `work` 槽函数没有被执行。你可以把 `self.signal_msg.connect(self.work)` 放在 `MyThread` 类的构造函数中,或者使用 `@pyqtSlot()` 装饰器来标记 `work` 方法作为槽函数。此外,为了避免使用 `time.sleep()` 阻塞主线程,你应该使用 `QApplication.processEvents()` 来处理事件循环。修改后的代码如下:
```
from PyQt5.QtCore import pyqtSignal, QThread, pyqtSlot
from PyQt5.QtWidgets import QApplication
class MyThread(QThread):
signal_msg = pyqtSignal()
def __init__(self):
super().__init__()
self.signal_msg.connect(self.work)
def run(self):
self.signal_msg.emit()
print("狗")
@pyqtSlot()
def work(self):
print(f"\ns")
if __name__ == '__main__':
print("a")
app = QApplication([])
my_thread = MyThread()
my_thread.start()
app.processEvents()
```
阅读全文