用python写一个QThread的使用范例
时间: 2024-03-28 09:42:08 浏览: 176
qthread示例
好的,以下是一个简单的QThread使用范例:
```python
from PyQt5.QtCore import QThread, pyqtSignal
import time
class MyThread(QThread):
# 定义信号,用于在主线程中更新UI
update_signal = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
# 在这里编写线程的业务逻辑
for i in range(5):
time.sleep(1)
self.update_signal.emit(f'当前进度:{i+1}')
if __name__ == '__main__':
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QPushButton, QWidget
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
label = QLabel('等待线程执行...')
layout.addWidget(label)
button = QPushButton('开始线程')
layout.addWidget(button)
thread = MyThread()
def update_ui(text):
# 接收信号,并在主线程中更新UI
label.setText(text)
thread.update_signal.connect(update_ui)
def start_thread():
# 点击按钮,启动线程
button.setText('线程执行中...')
button.setEnabled(False)
thread.start()
button.clicked.connect(start_thread)
window.setLayout(layout)
window.show()
app.exec_()
```
在这个例子中,我们创建了一个名为MyThread的子类,继承了QThread类。在run方法中编写了线程的业务逻辑,并且通过定义一个update_signal信号,将线程的进度信息发送到主线程中更新UI。
在主线程中,我们创建了一个简单的界面,有一个标签用于展示线程进度信息,和一个按钮用于启动线程。当点击按钮时,程序会启动线程,并且将按钮禁用,防止重复点击。
当线程运行时,每一秒钟会通过update_signal信号发送一条进度信息到主线程中,主线程接收到信号后,会将信息更新到标签中。当线程运行完毕后,按钮会重新启用,可以再次点击启动线程。
阅读全文