pyqt6 如何写多线程控制程序,子线程能控制进度条 请写一个例子
时间: 2024-02-13 21:08:00 浏览: 188
好的,下面是一个使用PyQt6写多线程控制程序的例子,其中子线程可以控制进度条:
```python
import sys
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
class Worker(QThread):
progress_update = pyqtSignal(int)
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
for i in range(101):
self.progress_update.emit(i) # 发送进度信号
self.msleep(50)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("多线程控制程序")
self.setGeometry(100, 100, 300, 200)
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(50, 50, 200, 30)
start_button = QPushButton("开始", self)
start_button.setGeometry(50, 100, 100, 30)
start_button.clicked.connect(self.start_worker)
stop_button = QPushButton("停止", self)
stop_button.setGeometry(150, 100, 100, 30)
stop_button.clicked.connect(self.stop_worker)
self.worker = None
def start_worker(self):
self.worker = Worker(self)
self.worker.progress_update.connect(self.update_progress) # 接收进度信号
self.worker.start()
def stop_worker(self):
if self.worker is not None:
self.worker.quit()
self.worker.wait()
def update_progress(self, value):
self.progress_bar.setValue(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec())
```
在这个例子中,我们创建了一个继承自QThread的Worker类,该类负责执行一些耗时任务,并且在执行过程中发送进度信号。主窗口中有一个进度条和两个按钮,分别用于开始和停止任务。当点击开始按钮时,我们创建一个Worker实例,并将其进度信号连接到主窗口的update_progress槽函数。当Worker执行过程中发送进度信号时,主窗口接收到信号并更新进度条的值。当点击停止按钮时,我们停止Worker的执行。
注意,在PyQt6中,我们需要使用progress_update = pyqtSignal(int)语句来声明一个进度信号,并使用self.progress_update.emit(i)语句在Worker中发送信号。另外,在连接信号和槽函数时,我们需要使用worker.progress_update.connect(self.update_progress)语句,而不是worker.connect(self.update_progress)。
阅读全文