Python 秒表应用程序延迟且递归

Python 秒表应用程序延迟且递归,python,tkinter,Python,Tkinter,在我的代码中,每当我再次按下“开始”按钮时,它就会运行得更快,并且您必须多次按下“停止”。除此之外,输入另一秒所需的时间超过一秒任何帮助都会很好。提前谢谢你!我不完全确定在这种情况下我能做些什么,因此非常感谢您的帮助!如前所述,在这个应用程序上制作1秒所需的时间比在普通秒表上慢,我不确定我能做些什么来修复这个问题。除此之外,再次按下按钮会使时间加快,并导致递归,因此我不确定如何执行此操作 import time from tkinter import * import sys #sys.set

在我的代码中,每当我再次按下“开始”按钮时,它就会运行得更快,并且您必须多次按下“停止”。除此之外,输入另一秒所需的时间超过一秒任何帮助都会很好。提前谢谢你!我不完全确定在这种情况下我能做些什么,因此非常感谢您的帮助!如前所述,在这个应用程序上制作1秒所需的时间比在普通秒表上慢,我不确定我能做些什么来修复这个问题。除此之外,再次按下按钮会使时间加快,并导致递归,因此我不确定如何执行此操作

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()
导入时间
从tkinter进口*
导入系统
#系统设置递归限制(1)
小时=0
分钟=0
秒=0
毫秒=0
window=Tk()
窗口标题(“秒表”)
配置(宽度=500,高度=100)
time=StringVar()
时间设置(“00:00:00:00”)
是_stop=False吗
def plus_sec():
全球小时数
全球会议记录
全局秒数
全局毫秒
毫秒+=1
如果毫秒=100:
毫秒=0
秒+=1
如果秒=60:
秒=0
分钟+=1
如果分钟=60:
分钟=0
小时数+=1
h_s=str(小时)
最小值=str(分钟)
秒=str(秒)
mil_s=str(毫秒)
如果len(hus)<2:
h_s='0'+h_s
如果长度(最小值)<2:
最小值='0'+最小值
如果长度(秒)小于2:
秒=0+秒
如果长度(密耳)小于2:
mil_s='0'+mil_s
设置时间(h_s+“:“+min_s+”:“+sec_s+”:“+mil_s)
def begin():
环球站在哪里
如果is_stop==False:
加上
窗口。之后(10,开始)
window.update()
其他:
通过
是_stop=False吗
def s_r():
环球站在哪里
如果is_stop==False:
_stop=True吗
其他:
通过
def restart():
全球小时数
全球会议记录
全局秒数
全局毫秒
小时=0
分钟=0
秒=0
毫秒=0
时间设置(“00:00:00:00”)
标题=标签(窗口,文本=“秒表”)
title.grid(行=1,列=2,pady=3,padx=3)
时间=标签(窗口,文本变量=时间)
时间网格(行=2,列=2,pady=3,padx=3)
开始=按钮(窗口,文本='start',命令=开始)
网格(行=3,列=1,pady=3,padx=3)
#lap=按钮(窗口,文本='lap',命令=开始)
#搭接网格(行=3,列=3,pady=3,padx=3)
停止=按钮(窗口,文本='stop',命令=s\U r)
网格(行=3,列=2,pady=3,padx=3)
重置=按钮(窗口,文本='reset',命令=重新启动)
reset.grid(行=3,列=3,pady=3,padx=3)
window.mainloop()

我不确定如何减少延迟,因为这取决于代码执行计算并最终用值更新
时间标签所花费的时间。但就按钮的问题而言,您可以尝试这些更改,这将相应地启用和禁用按钮,并防止多次单击

def begin():
环球站在哪里
如果is_stop==False:
stop.config(state='normal')
start.config(state='disabled')
加上
窗口。之后(10,开始)
window.update()
其他:
通过
是_stop=False吗
def s_r():
环球站在哪里
如果is_stop==False:
_stop=True吗
start.config(state='normal')
stop.config(state='disabled')
其他:
通过

我不确定如何减少延迟,因为这取决于代码执行计算并最终用值更新
时间标签所花费的时间。但就按钮的问题而言,您可以尝试这些更改,这将相应地启用和禁用按钮,并防止多次单击

def begin():
环球站在哪里
如果is_stop==False:
stop.config(state='normal')
start.config(state='disabled')
加上
窗口。之后(10,开始)
window.update()
其他:
通过
是_stop=False吗
def s_r():
环球站在哪里
如果is_stop==False:
_stop=True吗
start.config(state='normal')
stop.config(state='disabled')
其他:
通过

非常感谢您!我不知道tkinter按钮有状态!我学到了一些新东西!非常感谢。非常感谢你!我不知道tkinter按钮有状态!我学到了一些新东西!非常感谢。