python - 秒表应用程序延迟和递归
问题描述
在我的代码中,每当我再次按下开始按钮时,它会更快,您必须多次按下停止。除此之外,输入另一秒钟需要超过一秒钟的时间,任何帮助都会很好。先感谢您!我不完全确定在这种情况下我能做什么,所以非常感谢一些帮助!如前所述,在这个应用程序上花费一秒的时间比在普通秒表上慢,我不确定我能做些什么来解决这个问题。除此之外,再次按下按钮会使时间过得更快,并导致递归,所以我不知道该怎么做。
import time
from tkinter import *
import sys
#sys.setrecursionlimit(1)
hours = 0
minutes = 0
seconds = 0
milliseconds = 0
window = Tk()
window.title("Stopwatch")
window.configure(width=500, height = 100)
time = StringVar()
time.set("00:00:00:00")
is_stop = False
def plus_sec():
global hours
global minutes
global seconds
global milliseconds
milliseconds += 1
if milliseconds == 100:
milliseconds = 0
seconds += 1
if seconds == 60:
seconds = 0
minutes += 1
if minutes == 60:
minutes = 0
hours += 1
h_s = str(hours)
min_s = str(minutes)
sec_s = str(seconds)
mil_s = str(milliseconds)
if len(h_s) < 2:
h_s = '0' + h_s
if len(min_s) < 2:
min_s = '0' + min_s
if len(sec_s) < 2:
sec_s = '0' + sec_s
if len(mil_s) < 2:
mil_s = '0' + mil_s
time.set(h_s + ":" + min_s + ":" + sec_s + ":" + mil_s)
def begin():
global is_stop
if is_stop == False:
plus_sec()
window.after(10, begin)
window.update()
else:
pass
is_stop = False
def s_r():
global is_stop
if is_stop == False:
is_stop = True
else:
pass
def restart():
global hours
global minutes
global seconds
global milliseconds
hours = 0
minutes = 0
seconds = 0
milliseconds = 0
time.set("00:00:00:00")
title = Label(window, text="Stopwatch")
title.grid(row=1, column=2, pady=3, padx=3)
time_L = Label(window, textvariable=time)
time_L.grid(row=2, column=2, pady=3, padx=3)
start = Button(window, text='Start', command=begin)
start.grid(row=3, column=1, pady=3, padx=3)
#lap = Button(window, text='Lap', command=begin)
#lap.grid(row=3, column=3, pady=3, padx=3)
stop = Button(window, text='Stop', command=s_r)
stop.grid(row=3, column=2, pady=3, padx=3)
reset = Button(window, text='Reset', command=restart)
reset.grid(row=3, column=3, pady=3, padx=3)
window.mainloop()
解决方案
我不确定如何减少延迟,因为这取决于代码执行计算并最终time_L
使用值更新标签所花费的时间。但就按钮的问题而言,您可以尝试这些更改,这将相应地启用和禁用按钮并防止多次单击。
def begin():
global is_stop
if is_stop == False:
stop.config(state='normal')
start.config(state='disabled')
plus_sec()
window.after(10, begin)
window.update()
else:
pass
is_stop = False
def s_r():
global is_stop
if is_stop == False:
is_stop = True
start.config(state='normal')
stop.config(state='disabled')
else:
pass
推荐阅读
- php - 如何链接到页面的特定部分 HTML PHP
- c# - 当后端代码中的简单键值变量工作相同时,为什么要使用 redis 作为缓存层?
- google-apps-script - Google Slides Apps 脚本检索页面中的形状
- python-3.x - 在 KNeighborsClassifier 中使用自定义指标时,我不断收到“TypeError:只有整数标量数组可以转换为标量索引”
- java - JavaFX - 在使用选项卡时将 GUI 拆分为单独的类
- jquery - 通过函数调整电子窗口大小
- scheme - 匹配方案中的括号
- android - 当我使用 adb 显示 /sys/kernel/debug/tracing/available_filter_functions 时没有这样的设备
- python - 初始化以迭代抽象pyomo模型中的集合?
- angular-cli - 运行 ng serve -o 时出现错误