如何实时更新 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 标签?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5常用控件大全(详尽方法 + 实例操作,持续更新中…)