他们是否有可能每隔15分钟更新一次PyQT4中的Qwidget?我知道他们就像Qtimer,但也可以在特定时间自行更新QWidget,例如00h00 00h15 00h30 00h45 01h00,....他们是否有办法让Qtimer依赖时间?
答案 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次连续更改,它看起来像这样:
对于您的特定问题,当您启动应用程序时,您可以通过此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分钟。