2015-04-22 194 views
0

是否有可能每15分鐘更新一次PyQT4中的Qwidget?我知道它們就像Qtimer一樣,但是也可以在特定時間自行更新QWidget,例如00h00 00h15 00h30 00h45 01h00,...。那麼他們是如何使Qtimer依賴於時間的?每隔幾分鐘更新一次QWidget

回答

1

QTimer類有一個setInterval方法。你可以利用它來改變飛行中的等待時間。作爲一個簡短的例子,這段代碼將顯示當前秒。但是,如果第二個是10的倍數,將等待5秒鐘再開始之前:(從tutorial這是稍微修改瞭如何構建一個數字時鐘)

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() 

它看起來像這樣對於顯示的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分鐘。

+0

謝謝,這很清楚! – Driedan

相關問題