每分钟更新一次QWidget

时间:2015-04-22 19:34:35

标签: python pyqt pyqt4

他们是否有可能每隔15分钟更新一次PyQT4中的Qwidget?我知道他们就像Qtimer,但也可以在特定时间自行更新QWidget,例如00h00 00h15 00h30 00h45 01h00,....他们是否有办法让Qtimer依赖时间?

1 个答案:

答案 0 :(得分:3)

QTimer类有一个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次连续更改,它看起来像这样:

Seconds

对于您的特定问题,当您启动应用程序时,您可以通过此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分钟。