pyqt5 Qthread事件 进度条 案例

本文介绍了一个使用PyQt5实现的多线程进度条案例,通过继承QThread并定义信号对象,实现了GUI界面更新与线程同步。代码详细展示了如何创建线程,设置信号与槽,以及如何在主线程中更新UI组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyqt5 Qthread事件 进度条 案例

代码:

from PyQt5 import QtWidgets, QtCore
import sys
from PyQt5.QtCore import *
import time


# 继承QThread
class Runthread(QtCore.QThread):
    #  通过类成员对象定义信号对象
    _signal = pyqtSignal(str)

    def __init__(self):
        super(Runthread, self).__init__()

    def __del__(self):
        self.wait()

    def run(self):
        for i in range(100):
            time.sleep(0.2)
            self._signal.emit(str(i))  # 注意这里与_signal = pyqtSignal(str)中的类型相同


class Example(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()
        # 按钮初始化
        self.button = QtWidgets.QPushButton('开始', self)
        self.button.setToolTip('这是一个 <b>QPushButton</b> widget')
        self.button.resize(self.button.sizeHint())
        self.button.move(120, 80)
        self.button.clicked.connect(self.start_login)  # 绑定多线程触发事件

        # 进度条设置
        self.pbar = QtWidgets.QProgressBar(self)
        self.pbar.setGeometry(50, 50, 210, 25)
        self.pbar.setValue(0)

        # 窗口初始化
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('OmegaXYZ.com')
        self.show()

        self.thread = None  # 初始化线程

    def start_login(self):
        # 创建线程
        self.thread = Runthread()
        # 连接信号
        self.thread._signal.connect(self.call_backlog)  # 进程连接回传到GUI的事件
        # 开始线程
        self.thread.start()

    def call_backlog(self, msg):
        self.pbar.setValue(int(msg))  # 将线程的参数传入进度条


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myshow = Example()
    myshow.show()
    sys.exit(app.exec_())

显示效果:
在这里插入图片描述

来自:
https://www.omegaxyz.com/2019/03/07/pyqt5-multi-threading/

以下是一个使用PyQt5QThread类的示例,用于在文本框中每秒打印一个数字: ```python import sys from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi class WorkerThread(QThread): countChanged = pyqtSignal(int) def run(self): count = 0 while True: self.countChanged.emit(count) count += 1 self.sleep(1) class MainWindow(QMainWindow): def __init__(self): super().__init__() loadUi("QThread_Example_UI.ui", self) self.workerThread = WorkerThread() self.workerThread.countChanged.connect(self.updateCount) self.workerThread.start() def updateCount(self, count): self.textEdit.append(str(count)) if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 这个示例中,我们创建了一个继承自QThread的WorkerThread类,其中定义了一个countChanged信号和一个run方法。在run方法中,我们使用一个无限循环来不断增加计数器count,并通过countChanged信号将其发送给主窗口。 主窗口类MainWindow继承自QMainWindow,并使用loadUi方法加载了一个UI文件。在初始化方法中,我们创建了一个WorkerThread实例,并将其countChanged信号连接到了updateCount方法。然后,我们启动了workerThread线程。 updateCount方法用于更新文本框中的数字,每当countChanged信号被触发时,它会将count的值附加到文本框中。 请注意,为了运行这个示例,你需要将UI文件QThread_Example_UI.ui和Python脚本放在同一个目录下,并将UI文件转换为Python代码。你可以使用以下命令将UI文件转换为Python代码: ```shell pyuic5 QThread_Example_UI.ui -o QThread_Example_UI.py ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值