【问题标题】:How can I refresh my QWidget more than once a second using QTimer?如何使用 QTimer 每秒多次刷新我的 QWidget?
【发布时间】:2021-08-22 05:01:51
【问题描述】:

我想构建一个显示信息的 GUI,它每 10-100 毫秒更新一次。我试图通过设置 Qtimer.start(100) 将其实现到 QTimer 示例中,但它每秒只更新一次。怎样才能做到每秒刷新一次以上的GUI呢?我还尝试了手动 QWidget.update() 和 QTimer.setInterval(100) 没有效果。有没有更好的解决方案?

import sys
from python_qt_binding.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout,QLabel
from python_qt_binding.QtCore import Qt, QTimer,QDateTime

class RobolabWidget(QWidget):
    def __init__(self,parent=None):
        super(RobolabWidget, self).__init__(parent)
        self.setWindowTitle('QTimer example')

        self.listFile=QListWidget()
        self.label=QLabel('Label')
        self.startBtn=QPushButton('Start')
        self.endBtn=QPushButton('Stop')

        layout=QGridLayout()

        self.timer=QTimer()
        self.timer.setTimerType(Qt.PreciseTimer)
        self.timer.timeout.connect(self.showTime)

        layout.addWidget(self.label,0,0,1,2)

        self.timer.start(100)

        self.setLayout(layout)

    def showTime(self):
        time=QDateTime.currentDateTime()
        timeDisplay=time.toString('hh:mm:ss:ms')
        self.label.setText(timeDisplay)

【问题讨论】:

  • 代码对我来说看起来不错...运行 python 脚本会出现什么错误?
  • 我没有重现那个错误,你的操作系统是什么?尝试在self.label.setText(timeDisplay) 之后添加self.label.repaint()
  • 我没有收到错误。显示时间的标签不是每 100 毫秒更新一次,而是每秒更新一次。 self.label.repaint() 也无济于事。我在 Ubuntu 18.04 上工作。背景是我想用 ROS 构建一个控制和监控机器人的仪表板。 GUI 以 rqt 插件的形式实现。

标签: python qt pyqt4 qwidget qtimer


【解决方案1】:

我发现了问题。 QDateTime.currentDateTime() 的分辨率只有几秒。

我只使用适用于我的 python-datetime 函数而不是 QDateTime。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多