Pyqt5中QThread的多线程编程实例
发布时间:2023-12-26 19:40:58
在PyQt5中,可以使用QThread类实现多线程编程。QThread是一个用于管理线程的类,它提供了一些方法和信号,可以方便地创建和管理多线程。
下面是一个使用QThread类的多线程编程实例:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import time
class Worker(QThread):
finished = pyqtSignal() # 自定义信号,用于在线程完成时发出信号
def __init__(self):
super().__init__()
def run(self):
for i in range(5):
time.sleep(1) # 模拟耗时操作
print("子线程:", i)
self.finished.emit() # 发出信号,表示线程已完成
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("多线程示例")
self.setGeometry(100, 100, 300, 200)
self.button = QPushButton("启动线程", self)
self.button.clicked.connect(self.start_thread)
self.button.setGeometry(100, 100, 100, 30)
self.label = QLabel("等待线程完成...", self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setGeometry(50, 50, 200, 30)
self.worker = Worker()
self.worker.finished.connect(self.thread_finished)
def start_thread(self):
self.button.setEnabled(False)
self.label.setText("线程运行中...")
self.worker.start() # 启动线程
def thread_finished(self):
self.button.setEnabled(True)
self.label.setText("线程已完成")
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
在上面的例子中,我们创建了一个Worker类,继承自QThread。在Worker类中,我们重写了run()方法,该方法中模拟了一个耗时的操作,并使用了time.sleep()来模拟延时。然后,在run()方法中,我们通过self.finished.emit()发送了一个自定义信号,表示线程已完成。
在MainWindow类中,我们创建了一个按钮和一个文本标签。当点击按钮时,我们禁用按钮,并将标签的文本设置为"线程运行中..."。然后,我们调用self.worker.start()启动线程。
在thread_finished()方法中,我们接收到worker的finished信号后,我们将按钮重新启用,并将标签的文本设置为"线程已完成"。
通过运行上述代码,你可以看到按钮被禁用,而标签显示"线程运行中..."。当线程完成后,按钮重新启用,并且标签显示"线程已完成"。
这就是使用QThread类实现多线程编程的一个简单示例。在实际应用中,你可以在Worker类中执行更复杂的操作,例如下载文件、处理大数据等。
