我如何使用 QTime() 制作一个时间计数器
How can i make a time counter using QTime()
我正在尝试使用 QTime
在 python
中进行计时,并使用 PyQt
在 QLabel
中显示该时间。我需要这样做,以显示自我的程序开始运行以来已经过去了多少时间,使用这种时间格式:00:00:00
。我阅读了 QTime
的文档并尝试了我在互联网上搜索的另一个代码,但我无法使其工作。
这是我的代码的一部分:
class MyApplication(QtGui.QApplication):
def __init__(self, *args, **kwargs):
super(MyApplication, self).__init__(*args, **kwargs)
self.t = QTime() #I start QTime at the same time
self.t.start() # the program starts.
self.label_1 = QtGui.QLabel("Time since the program started:")
self.time_label = QtGui.QLabel("00:00:00")
self.tmr = QTimer() #I use QTimer because I need it
#for another part of the code
self.tmr.timeout.connect(self.clock)
def clock(self):
self.m = 0
self.elapsed = self.t.elapsed()
self.s = int((self.elapsed)/1000)
if self.s == 60:
self.m += 1
self.s = 0
self.time_sec = str(self.s)
self.time_min = str(self.m)
self.time = self.time_min + ":" + self.time_sec
self.time_label.setText(self.time) #I show the time in this QLabel()
当我构建它时,我得到了这种时间格式:0:0
并且在 60 秒后(它显示秒数)我得到了这个结果:1:0
,没有其他任何事情发生。
如何使用这种格式制作我需要的时间计数器:00:00:00
。我可以使用 QTimer
来完成吗?希望你能帮助我。
------ 编辑 ------
感谢@amicitas 和@linusg 的回答,我尝试了 datetime
模块,并编写了这个简单的代码:
class MyApplication(QtGui.QApplication):
def __init__(self, *args, **kwargs):
super(MyApplication, self).__init__(*args, **kwargs)
self.t0 = datetime.now()
self.tmr = QTimer()
self.tmr.timeout.connect(self.clock)
def.clock(self):
self.t1 = datetime.now()
self.hour = self.t1.hour - self.t0.hour
self.minute = self.t1.minute - self.t0.minute
self.second = self.t1.second - self.t0.second
print self.hour, self.minute, self.second
但是,当我构建它时,当计数器达到 45 秒时,它会从 45 变为 -15 并出现“1 分钟”。这是:
当达到0:0:44
时,转为0:1:-15
。
可能是什么问题?我怎样才能显示我需要的时间格式?这是00:00:00
。希望你能帮助我。
我已经为您编写并测试了以下代码:
from datetime import datetime
import time
if __name__== '__main__':
initTimeObj = datetime.now()
nullRef = datetime(initTimeObj.year, initTimeObj.month, initTimeObj.day, 0, 0, 0)
print("Initial time:")
print(str(initTimeObj.hour) + ':' + str(initTimeObj.minute) + ':' + str(initTimeObj.second))
print("")
while(True):
time.sleep(1)
myDiff = datetime.now() - initTimeObj
myTimeObj = nullRef + myDiff
print(str(myTimeObj.hour) + ':' + str(myTimeObj.minute) + ':' + str(myTimeObj.second))
# Now you get a counting as follows:
# 0:0:1
# 0:0:2
# 0:0:3
# ...
# 0:0:59
# 0:1:0
# 0:1:1
# 0:1:2
# ...
这段代码正是您所需要的。它从 0:0:0
开始计数并继续计数。如果你真的想要一个两位数的格式,比如 00:00:00
,可能需要做一些更多的调整。如果你愿意,我可以进一步调查。
希望对您有所帮助。如果它对你有用,请告诉我。
import datetime
import time
start = datetime.datetime.now()
while True:
elapsed_seconds = (datetime.datetime.now() - start).total_seconds()
hour = int(elapsed_seconds // 3600)
min = int(elapsed_seconds % 3600 // 60)
seconds = int(elapsed_seconds % 60)
print '{:02d}:{:02d}:{:02d}'.format(hour, minute, second)
time.sleep(1)
我正在尝试使用 QTime
在 python
中进行计时,并使用 PyQt
在 QLabel
中显示该时间。我需要这样做,以显示自我的程序开始运行以来已经过去了多少时间,使用这种时间格式:00:00:00
。我阅读了 QTime
的文档并尝试了我在互联网上搜索的另一个代码,但我无法使其工作。
这是我的代码的一部分:
class MyApplication(QtGui.QApplication):
def __init__(self, *args, **kwargs):
super(MyApplication, self).__init__(*args, **kwargs)
self.t = QTime() #I start QTime at the same time
self.t.start() # the program starts.
self.label_1 = QtGui.QLabel("Time since the program started:")
self.time_label = QtGui.QLabel("00:00:00")
self.tmr = QTimer() #I use QTimer because I need it
#for another part of the code
self.tmr.timeout.connect(self.clock)
def clock(self):
self.m = 0
self.elapsed = self.t.elapsed()
self.s = int((self.elapsed)/1000)
if self.s == 60:
self.m += 1
self.s = 0
self.time_sec = str(self.s)
self.time_min = str(self.m)
self.time = self.time_min + ":" + self.time_sec
self.time_label.setText(self.time) #I show the time in this QLabel()
当我构建它时,我得到了这种时间格式:0:0
并且在 60 秒后(它显示秒数)我得到了这个结果:1:0
,没有其他任何事情发生。
如何使用这种格式制作我需要的时间计数器:00:00:00
。我可以使用 QTimer
来完成吗?希望你能帮助我。
------ 编辑 ------
感谢@amicitas 和@linusg 的回答,我尝试了 datetime
模块,并编写了这个简单的代码:
class MyApplication(QtGui.QApplication):
def __init__(self, *args, **kwargs):
super(MyApplication, self).__init__(*args, **kwargs)
self.t0 = datetime.now()
self.tmr = QTimer()
self.tmr.timeout.connect(self.clock)
def.clock(self):
self.t1 = datetime.now()
self.hour = self.t1.hour - self.t0.hour
self.minute = self.t1.minute - self.t0.minute
self.second = self.t1.second - self.t0.second
print self.hour, self.minute, self.second
但是,当我构建它时,当计数器达到 45 秒时,它会从 45 变为 -15 并出现“1 分钟”。这是:
当达到0:0:44
时,转为0:1:-15
。
可能是什么问题?我怎样才能显示我需要的时间格式?这是00:00:00
。希望你能帮助我。
我已经为您编写并测试了以下代码:
from datetime import datetime
import time
if __name__== '__main__':
initTimeObj = datetime.now()
nullRef = datetime(initTimeObj.year, initTimeObj.month, initTimeObj.day, 0, 0, 0)
print("Initial time:")
print(str(initTimeObj.hour) + ':' + str(initTimeObj.minute) + ':' + str(initTimeObj.second))
print("")
while(True):
time.sleep(1)
myDiff = datetime.now() - initTimeObj
myTimeObj = nullRef + myDiff
print(str(myTimeObj.hour) + ':' + str(myTimeObj.minute) + ':' + str(myTimeObj.second))
# Now you get a counting as follows:
# 0:0:1
# 0:0:2
# 0:0:3
# ...
# 0:0:59
# 0:1:0
# 0:1:1
# 0:1:2
# ...
这段代码正是您所需要的。它从 0:0:0
开始计数并继续计数。如果你真的想要一个两位数的格式,比如 00:00:00
,可能需要做一些更多的调整。如果你愿意,我可以进一步调查。
希望对您有所帮助。如果它对你有用,请告诉我。
import datetime
import time
start = datetime.datetime.now()
while True:
elapsed_seconds = (datetime.datetime.now() - start).total_seconds()
hour = int(elapsed_seconds // 3600)
min = int(elapsed_seconds % 3600 // 60)
seconds = int(elapsed_seconds % 60)
print '{:02d}:{:02d}:{:02d}'.format(hour, minute, second)
time.sleep(1)