forked from huangxin/ailai
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
|
|
import threading
|
||
|
|
|
||
|
|
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
|
||
|
|
from PySide6.QtCore import QThread, Signal, QObject
|
||
|
|
|
||
|
|
class Worker:
|
||
|
|
# 定义一个类属性的信号
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
self.task_done_signal = Signal(str)
|
||
|
|
def run_task(self):
|
||
|
|
import time
|
||
|
|
time.sleep(2) # 模拟耗时操作
|
||
|
|
# 发送信号
|
||
|
|
self.task_done_signal.emit("子线程任务完成!")
|
||
|
|
|
||
|
|
|
||
|
|
class MainWindow(QMainWindow):
|
||
|
|
def __init__(self):
|
||
|
|
super().__init__()
|
||
|
|
self.setWindowTitle("子线程信号示例")
|
||
|
|
self.setGeometry(200, 200, 400, 300)
|
||
|
|
|
||
|
|
# 添加按钮
|
||
|
|
self.button = QPushButton("启动子线程", self)
|
||
|
|
self.button.setGeometry(100, 100, 200, 50)
|
||
|
|
self.button.clicked.connect(self.run_task)
|
||
|
|
|
||
|
|
# 创建子线程和工作者对象
|
||
|
|
self.worker_thread = threading.Thread(target=self.run_task)
|
||
|
|
self.worker = Worker()
|
||
|
|
|
||
|
|
# 连接信号和槽
|
||
|
|
self.worker.task_done_signal.connect(self.show_message)
|
||
|
|
|
||
|
|
def run_task(self):
|
||
|
|
# 启动子线程
|
||
|
|
self.worker_thread.start()
|
||
|
|
|
||
|
|
def show_message(self, message):
|
||
|
|
# 显示来自子线程的消息
|
||
|
|
QMessageBox.information(self, "任务完成", message)
|
||
|
|
|
||
|
|
# 停止子线程
|
||
|
|
self.worker_thread.quit()
|
||
|
|
self.worker_thread.wait()
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
app = QApplication([])
|
||
|
|
|
||
|
|
window = MainWindow()
|
||
|
|
window.show()
|
||
|
|
|
||
|
|
app.exec()
|