首页 > 解决方案 > 秒表应用程序延迟和递归

问题描述

在我的代码中,每当我再次按下开始按钮时,它会更快,您必须多次按下停止。除此之外,输入另一秒钟需要超过一秒钟的时间,任何帮助都会很好。先感谢您!我不完全确定在这种情况下我能做什么,所以非常感谢一些帮助!如前所述,在这个应用程序上花费一秒的时间比在普通秒表上慢,我不确定我能做些什么来解决这个问题。除此之外,再次按下按钮会使时间过得更快,并导致递归,所以我不知道该怎么做。

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()

标签: pythontkinter

解决方案


我不确定如何减少延迟,因为这取决于代码执行计算并最终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

推荐阅读