<p>你在找<code>QElapsedTimer</code>,而不是{<cd2>}。在</p>
<p>操作系统已经在为您测量时间的流逝。你自己干得再好不过了。在</p>
<p>“我正试着用这种方法来计算”——它比使用<code>QElapsedTimer</code>更不准确,因为你假设已经过了你想睡觉的时间。这几乎永远不会是真的:实际经过的时间量与<code>sleep</code>的参数不同。更糟糕的是,这些错误通常也是系统性的,所以你的时间积累会有偏差,随着时间的推移,你的时间积累会变得不那么准确。所以,别这么做。这没道理。也许你没有告诉我们你到底想做什么:如果你问的是一个不起作用的特定解决方案,那么告诉我们该解决方案应该针对什么问题。<strong>为什么</strong>你想用这种方式来解决这个问题?在</p>
<p>从概念上讲,Qt中有三种不同的计时器:</p>
<ol>
<li><p>{1}它是一个计时系统的计时通道。您应该使用这个类来测量按钮单击之间经过了多少时间。</p></li>
<li><p><code>QTime</code>就像一个挂钟:你可以问它通过<code>currentTime()</code>的时间,然后取两个时间读数之间的差值来获得经过的时间。只有当您需要知道绝对时间时才使用这个类,否则<code>QElapsedTimer</code>将为经过的时间度量提供更好的分辨率。</p></li>
<li><p><code>QTimer</code>是超时的来源:它是一种定期调用代码的方法。这并不是用来测量时间的,只是为了让代码周期性地运行,例如,当您希望刷新屏幕显示或实现周期性地发出哔声的节拍器时。不能保证您的代码会被及时调用,也不能保证不会错过一些节拍。你想保证它,你需要写一个内核驱动程序,没有办法。</p></li>
</ol>
<p>下面是python3.5中使用PyQt4的完整示例。它使用<code>QElapsedTimer</code>来测量按钮按下之间的时间间隔,使用<code>QTimer</code>来保持时间显示的刷新。在</p>
<pre><code>#!/usr/bin/env python
#https://github.com/KubaO/stackoverflown/tree/master/questions/interval-timer-38036583
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
if __name__ == "__main__":
running = False
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
layout = QtGui.QVBoxLayout(w)
label = QtGui.QLabel()
button = QtGui.QPushButton('Start')
timer = QtCore.QElapsedTimer()
updateTimer = QtCore.QTimer()
layout.addWidget(label)
layout.addWidget(button)
def onTimeout():
label.setText('Elapsed: {0}ms'.format(timer.elapsed()))
def onClicked():
global running
if running:
onTimeout()
updateTimer.stop()
button.setText('Start')
else:
timer.start()
updateTimer.start()
button.setText('Stop')
running = not running
updateTimer.setInterval(1000/25) # ~25fps update rate
updateTimer.timeout.connect(onTimeout)
button.clicked.connect(onClicked)
w.show()
sys.exit(app.exec_())
</code></pre>