PyQt5 实时刷新数据

#!/user/bin/env python3
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets,QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys
import time


class RefreshWidget(QWidget):
    def __init__(self,parent=None):
        super(RefreshWidget, self).__init__(parent)

        layout=QVBoxLayout()

        self.label = QLabel()
        self.label.setAlignment(Qt.AlignCenter)

        pushButton = QPushButton("pushButton")
        pushButton.clicked.connect(self.call_back_btn_func)

        layout.addWidget(self.label)
        layout.addWidget(pushButton)

        self.setLayout(layout)
        self.resize(400, 300)

    def call_back_btn_func(self):
        # 刷新1-10
        for i in range(1,11):
            self.label.setText(str(i))
            # 实时刷新
            app.processEvents()
            time.sleep(1)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window=RefreshWidget()
    window.show()
    sys.exit(app.exec())

time sleep() 函数推迟调用线程的运行刷新移动窗口有种卡顿的感觉,还是使用线程刷新比较合适

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 1:
            # 刷新1-10
            for i in range(1, 11):
                self.update_date.emit(str(i))
                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.thread = QThread()

        self.backend = BackendThread()
        # 连接信号
        self.backend.update_date.connect(self.handleDisplay)
        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_())

参考:PyQt5 利用线程刷新界面

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
PyQt5中,可以通过线程来实现动态刷新数据。首先,你可以创建一个继承自QThread的后台线程类,该类负责在后台获取数据并发出信号。然后,在主线程中,你可以连接该信号到一个槽函数,该槽函数负责更新UI上的数据。 下面是一个示例代码来演示如何在PyQt5中实现动态刷新数据: ```python from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit # 后台线程类 class BackendThread(QThread): dataChanged = pyqtSignal(str) # 定义一个信号,用于数据改变时发出 def run(self): while True: # 在这里获取数据并处理 data = self.getData() # 发出信号,通知UI更新数据 self.dataChanged.emit(data) # 延时一段时间 self.msleep(1000) def getData(self): # 获取数据的逻辑 return "New Data" # 主窗口类 class MainWindow(QDialog): def __init__(self): super().__init__() # 创建一个后台线程对象 self.backendThread = BackendThread() self.backendThread.dataChanged.connect(self.updateData) # 创建一个文本框用于显示数据 self.dataText = QLineEdit(self) # 启动后台线程 self.backendThread.start() def updateData(self, data): # 更新UI上的数据 self.dataText.setText(data) # 应用程序入口 if __name__ == "__main__": app = QApplication([]) mainWindow = MainWindow() mainWindow.show() app.exec_() ``` 在这个示例代码中,我们创建了一个后台线程类`BackendThread`,它负责获取数据并发出信号。在主窗口类`MainWindow`中,我们连接了这个信号到一个槽函数`updateData`,该函数负责更新UI上的数据。 当后台线程获取到新数据时,会发出`dataChanged`信号,并将数据作为参数传递给槽函数`updateData`,从而实现动态刷新数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值