如何解决时间函数总是给我0.0输出
我试图做一个CPS计数器,当我达到100次点击时,它应该打印“测试”并打印获得100次点击所需的时间。但是它总是给出0.0作为时间输出。
import tkinter
import time
counter = tkinter.Tk()
clicks = 0
def addClick():
global clicks
clicks = clicks + 1
lbl.configure(text=clicks)
start = time.time()
if clicks == 100:
print("test")
end = time.time()
print(start - end)
lbl = tkinter.Label(counter,text = clicks)
lbl.pack()
btn = tkinter.Button(counter,text="Click here",command=addClick)
btn.pack()
counter.mainloop()
解决方法
...
start = time.time()
if clicks == 100:
print("test")
end = time.time()
print(start - end)
每次单击后,您将继续重新启动start
。一种可能的解决方案是仅在第一次单击后启动它。这也需要start
成为全局变量。
还请注意,您应该执行end - start
,而不是start - end
。
clicks = 0
start = None
...
global clicks
global start
...
if clicks == 1:
# instantiating 'start' only if it was the first click
start = time.time()
elif clicks == 100:
print("test")
end = time.time()
print(end - start)
但是,使用全局变量既有代码气味又有反模式,而在这样一个很小的程序中我们已经有2个了。
您可以尝试将它们包装在数据结构中,例如dict
:
import tkinter
import time
counter = tkinter.Tk()
data = {'clicks': 0,'start': None}
def addClick():
data['clicks'] += 1
lbl.configure(text=data['clicks'])
if data['clicks'] == 1:
# instantiating 'start' only if it was the first click
data['start'] = time.time()
elif data['clicks'] == 100:
print("test")
end = time.time()
print(end - data['start'])
lbl = tkinter.Label(counter,text=data['clicks'])
lbl.pack()
btn = tkinter.Button(counter,text="Click here",command=addClick)
btn.pack()
counter.mainloop()
另一种实际的拟合解决方案是将整个tkinter应用程序包装在一个类中,该类可以跟踪其自身状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。