每分钟更新一次 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 分钟。
他们是否有可能每 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 分钟。