pyQt5 实时刷新界面例子 QThread

代码 如下:

from PyQt5.QtCore import QThread, pyqtSignal, QDateTime, QObject
from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit, QLabel
import time
import sys


class BackendThread(QObject):
    # 通过类成员对象定义信号
    update_date = pyqtSignal(str)

    # 处理业务逻辑
    def run(self):
        while True:
            data = QDateTime.currentDateTime()
            currTime = data.toString("yyyy-MM-dd hh:mm:ss")
            self.update_date.emit(str(currTime))
            time.sleep(1)


class Window(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        self.setWindowTitle('PyQt 5界面实时更新例子')
        self.resize(400, 100)
        self.input = QLabel(self)
        self.input.resize(400, 100)
        self.initUI()

    def initUI(self):
        # 创建线程
        self.backend = BackendThread()
        # 连接信号
        self.backend.update_date.connect(self.handleDisplay)
        self.thread = QThread()
        self.backend.moveToThread(self.thread)
        # 开始线程
        self.thread.started.connect(self.backend.run)
        self.thread.start()

    # 将当前时间输出到文本框
    def handleDisplay(self, data):
        self.input.setText(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

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

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用QThread的信号和槽机制来终止线程的运行。具体实现方式可以参考以下代码示例: ```python import sys import time from PyQt5 import QtCore, QtWidgets class Worker(QtCore.QObject): finished = QtCore.pyqtSignal() progress = QtCore.pyqtSignal(int) def __init__(self): super().__init__() @QtCore.pyqtSlot() def run(self): count = 0 while True: if count >= 100: self.finished.emit() break self.progress.emit(count) time.sleep(0.1) count += 1 class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.thread = QtCore.QThread() self.worker = Worker() self.worker.moveToThread(self.thread) self.progress_bar = QtWidgets.QProgressBar() self.setCentralWidget(self.progress_bar) self.worker.finished.connect(self.thread.quit) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) self.worker.progress.connect(self.progress_bar.setValue) self.thread.started.connect(self.worker.run) self.thread.start() self.setWindowTitle("PyQt5 Thread Example") def closeEvent(self, event): self.worker.finished.emit() self.thread.quit() self.thread.wait() event.accept() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们定义了一个Worker类,该类继承自QObject,其中包含了一个run函数,该函数会不断地发送进度信号,直到完成任务。我们还定义了一个MainWindow类,该类继承自QMainWindow,其中包含了一个进度条,可以显示任务的进度。在MainWindow的构造函数中,我们创建了一个QThread对象和一个Worker对象,并将Worker对象移动到QThread线程中。我们还将Worker类的信号和槽连接起来,以便在Worker运行时更新进度条。最后,我们启动了QThread线程,并在关闭窗口时终止了线程的运行。 在上述代码中,我们并没有显示地终止线程的运行,而是通过发送finished信号来告诉线程任务已经完成。这种方式可以让线程在完成任务后自动退出,避免了线程无法退出的问题。如果需要立即终止线程的运行,可以在Worker类中添加一个停止标志,并在run函数中检查该标志。当需要终止线程时,设置该标志即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值