如何实时更新 PyQt5 标签?

Posted

技术标签:

【中文标题】如何实时更新 PyQt5 标签?【英文标题】:How to update PyQt5 label in real time? 【发布时间】:2020-09-07 04:00:18 【问题描述】:

大家好,我目前正在开发一个每 15 秒更新一次的 GUI。我对 Python 也很陌生,所以我正在寻找一些可以在这里获得的指导。

我从每 15 秒更新一次的 .txt 文件中获取数据,所以现在我尝试每 15 秒将这些数据输入 GUI。它可以工作,但是在我的提示下运行了几次后出现了错误代码,

QEventDispatcherWin32::registerTimer: 创建计时器失败(当前进程已使用其所有系统允许的窗口管理器对象句柄。)

GUI 仍将每 15 秒更新一次,但该错误让我觉得我已经做错了。 我想知道是不是因为我不断在 Cuff 循环中创建新计时器?

这是我的 GUI 的代码。

from PyQt5 import QtCore, QtGui, QtWidgets, uic
import sys
import time

class dataProcessing(QtWidgets.QMainWindow):
    def __init__(self):
        super(dataProcessing,self).__init__()
        uic.loadUi('CuffingEfficiency2.ui',self)
        self.show()
        self.Cuff()

    def Cuff(self):
        with open('Cuffing.txt', 'r') as r:
                l1,l2,l3,l4,l5,l6 = [float(i) for i in r.readlines()]
                self.label_8.setText(str(l1))
                self.label_9.setText(str(l3))
                self.label_12.setText(str(l5))
                self.label_13.setText(str(l2))
                self.label_10.setText(str(l4))
                self.label_11.setText(str(l6))
                           
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.Cuff)
        self.timer.start(15000)     
                

app = QtWidgets.QApplication(sys.argv)
window = dataProcessing()
app.exec_()

谢谢!

【问题讨论】:

【参考方案1】:

可能是因为您在每次执行“Cuff”时都创建了一个新的 QTimer,而在您的情况下,一个 QTimer 就足够了:

class dataProcessing(QtWidgets.QMainWindow):
    def __init__(self):
        super(dataProcessing, self).__init__()
        uic.loadUi("CuffingEfficiency2.ui", self)
        self.show()
        timer = QtCore.QTimer(self, timeout=self.Cuff, interval=15 * 1000)
        timer.start()
        self.Cuff()

    def Cuff(self):
        labels = (
            self.label_8,
            self.label_9,
            self.label_12,
            self.label_13,
            self.label_10,
            self.label_11,
        )
        with open("Cuffing.txt", "r") as r:
            for label, line in zip(
                labels,
                r.readlines(),
            ):
                try:
                    label.setNum(float(line))
                except ValueError:
                    pass

【讨论】:

我知道,所以我的 Cuff Loop 一直在创建新的计时器。非常感谢人!这很有帮助,因为我对 Python 还很陌生,所以有很多简单的事情我不知道。 对不起,我能知道这是什么意思吗? timer = QtCore.QTimer(self, timeout=self.Cuff, interval=15 * 1000)间隔部分,我有点迷路了。

以上是关于如何实时更新 PyQt5 标签?的主要内容,如果未能解决你的问题,请参考以下文章

在发送 http 请求时让 PyQt5 标签动态更新

PyQt5常用控件大全(详尽方法 + 实例操作,持续更新中…)

如何更新 PyQt5?

如何使用串行向我的 PyQt5 窗口添加实时(更新)图?

PyQt5如何使用python在迭代循环中更新单元格值Qtablewidget

如何在 PyQT5 上更新 QLCDNumber 的值?