pyqt如何获得QThread运行结果并展示在QMessageBox
时间: 2024-05-12 15:17:24 浏览: 125
利用PyQt中的QThread类实现多线程
QThread本身不会返回结果,但可以通过信号和槽机制传递结果。具体方法如下:
1.定义一个继承自QThread类的子类,并在其run()方法中执行耗时操作并发射信号。
2.在主线程中通过创建子类的对象并连接其信号与槽,启动线程。
3.在槽函数中接收并处理子线程发出的信号,将结果展示在QMessageBox上。
以下是示例代码:
```
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMessageBox
class MyThread(QThread):
finished_signal = pyqtSignal(str)
def __init__(self, parent=None):
super(MyThread, self).__init__(parent)
def run(self):
# 耗时操作
result = "Hello, PyQt!"
self.finished_signal.emit(result)
class MyWindow(QMessageBox):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setWindowTitle("QThread Demo")
self.setStandardButtons(QMessageBox.Ok)
# 创建子线程对象并连接信号与槽
self.thread = MyThread(self)
self.thread.finished_signal.connect(self.show_result)
def show_result(self, result):
# 在QMessageBox中展示结果
self.setText(result)
self.show()
def start_thread(self):
# 启动子线程
self.thread.start()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = MyWindow()
window.start_thread()
sys.exit(app.exec_())
```
在此示例中,子线程执行耗时操作并发射finished_signal信号,主线程连接该信号并在槽函数中接收结果并展示在QMessageBox上。
阅读全文