每分钟更新一次 QWidget

Update QWidget every minutes

他们是否有可能每 15 分钟更新一次 PyQT4 中的 Qwidget?我知道它们类似于 Qtimer,但是否也可以在特定时间自行更新 QWidget,例如 00h00 00h15 00h30 00h45 01h00,...。那么他们是让 Qtimer 依赖于时间的方法吗?

QTimer class has a setInterval 方法。您可以利用它来动态更改等待时间。作为一个简短的例子,这段代码将显示当前的秒数。但是,如果秒是 10 的倍数,它将等待 5 秒再开始:

import sys
from PyQt4 import QtGui, QtCore
from time import strftime

class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.initUI()

    def initUI(self):
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.Time)
        self.timer.start(1000)
        self.lcd = QtGui.QLCDNumber(self)
        self.lcd.display(strftime("%S"))
        self.setCentralWidget(self.lcd)
        self.setGeometry(300,300,250,100)

    def Time(self):
        if int(strftime("%S")) % 10 == 0:
            self.timer.setInterval(5000)
        else:
            self.timer.setInterval(1000)
        self.lcd.display(strftime("%S"))

def main():
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

(这是从显示如何构建数字时钟的 tutorial 稍作修改)

连续4次显示变化是这样的:


对于您的特定问题,当您启动应用程序时,您可以通过 answer 中提供的函数找到下一刻钟之前的时间:

def next_quarter_hour(self):
    dt = datetime.datetime.now()
    nsecs = dt.minute*60+dt.second+dt.microsecond*1e-6  
    delta = (nsecs//900)*900+900-nsecs
    return delta * 1000.0

这将改变以下内容:

def initUI(self):
    ...
    self.timer.start(next_qt_hour)
    ...

def Time(self):
    if int(strftime("%M")) % 15 == 0:
        self.timer.setInterval(900000)
    self.lcd.display(strftime("%M"))

使用它来设置您的第一个间隔。然后,一旦计时器耗尽,将间隔重置为 15 分钟。