Python 程序多次更换标签的空间问题

Python 程序多次更换标签的空间问题,python,tkinter,time,label,space,Python,Tkinter,Time,Label,Space,我正在做一个程序,每25分钟让用户注意一次,然后给他5分钟的休息时间,对于用很少的时间(不到2分钟)测试代码来说一切都很好,但是当我在真正的25分钟内测试它时,它给了我这个错误: 递归错误:超过最大递归深度 我认为我需要改变递归深度,然后我改变了它: sys.setrecursionlimit(1000000) 然后它真的超过了2分钟,但是当它达到大约10分钟时,程序就停止了 我猜这是因为程序占用了很大的内存空间或者类似的东西,但是我如何解决这个问题呢 我将尝试简要介绍主要功能,以便您能够理

我正在做一个程序,每25分钟让用户注意一次,然后给他5分钟的休息时间,对于用很少的时间(不到2分钟)测试代码来说一切都很好,但是当我在真正的25分钟内测试它时,它给了我这个错误:

递归错误:超过最大递归深度

我认为我需要改变递归深度,然后我改变了它:

sys.setrecursionlimit(1000000)

然后它真的超过了2分钟,但是当它达到大约10分钟时,程序就停止了

我猜这是因为程序占用了很大的内存空间或者类似的东西,但是我如何解决这个问题呢

我将尝试简要介绍主要功能,以便您能够理解以下想法:

sec=1500
count=0
def run():
    global sec
    global count
    m,s=divmod(sec,60)   
    if sec >=0:
        m,s=divmod(sec,60)
        lblmin.config(text=str(m).zfill(2))
        lblsec.config(text=str(s).zfill(2))
        sec -= 1
        if sec==-1:
            count += 1
            if count%2 ==0 :   #to know if the timer will do 5 min or 25 min
                confstr=messagebox.showinfo("stert?","timer will start now")
                if confstr:
                    sec=1500
            else: #for break
                runbreak=False
                if runbreak == False:
                    root.attributes("-topmost", True)
                    ask=messagebox.askyesno("break","break for 5 min")
                    runbreak=True
                if runbreak:
                    sec=300


    root.after(1000,run)
    root.mainloop()
也许(正如我所想)这是因为lblmin和lblsec改变的时间太长了,但我真的没有任何想法来解决这个问题


请帮助:(

Python没有针对尾部递归进行优化,对此有一个解释

实际上,这意味着python限制了函数调用自身的次数(如果没有,最终会出现堆栈溢出)。您可以更改该限制,正如您使用
setrecursionlimit
所做的那样,但从根本上说,该限制始终存在


我建议您重构代码,以使用while循环来代替循环。

首先您必须理解,先生,我正在尝试理解它,但您能确定我代码中的确切问题吗?您是否推荐任何程序来解决此问题:{除了阅读@stovfl建议的内容外,您可以分享您的整个程序吗?我可以看到许多需要改进的地方,代码的其余部分可能还有其他问题。您需要将语句
root.mainloop()
run()
函数移到脚本末尾。