pyqt 多线程
时间: 2023-06-29 18:09:14 浏览: 138
PyQt 是一个基于 Python 的 GUI 编程框架,支持多线程编程。在 PyQt 中,可以通过 QThread 类来创建新的线程,还可以使用信号和槽机制来进行不同线程之间的通信。
下面是一个简单的 PyQt 多线程示例:
```python
import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
class Worker(QThread):
finished = pyqtSignal()
progress = pyqtSignal(int)
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
for i in range(1, 101):
self.progress.emit(i)
self.msleep(100)
self.finished.emit()
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.label = QLabel("Progress Bar", self)
self.label.setGeometry(50, 50, 200, 50)
self.thread = Worker(self)
self.thread.finished.connect(self.finished)
self.thread.progress.connect(self.update_progress)
self.thread.start()
def update_progress(self, value):
self.label.setText(f"Progress: {value}%")
def finished(self):
self.label.setText("Finished")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个名为 Worker 的 QThread 类,该类模拟了一个长时间运行的任务。在 MainWindow 类中,我们创建了一个 Worker 实例,并启动它的运行。在 Worker 类中,我们使用 pyqtSignal 定义了两个信号:finished 和 progress。finished 信号在 Worker 运行结束时发出,progress 信号则在 Worker 运行期间定期发出,以更新进度条。
在 MainWindow 类中,我们将 progress 信号连接到 update_progress() 方法,该方法更新标签文本以显示当前进度。我们还将 finished 信号连接到 finished() 方法,该方法在 Worker 运行结束时更新标签文本。最后,我们调用 thread.start() 方法启动 Worker 线程。
这只是一个简单的 PyQt 多线程示例,还有许多其他的用法和技巧可以学习。
阅读全文