程序多次更改标签空间中的问题

问题描述 投票:0回答:1

我正在做一个程序,它使用户每25分钟关注一次,然后给他5分钟的休息时间,这对于用很少的时间(少于2分钟)测试代码是一件好事,但是当我在真正的25分钟内对其进行测试时, ,它给了我这个错误:

[RecursionError:超过最大递归深度

我认为我需要更改递归深度,然后通过以下方式更改它:

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

也许(只是我的想法)是因为lblminlblsec的更改时间很长,但我真的不知道要解决此问题。

请帮助:(

python tkinter time label space
1个回答
0
投票

Python尚未针对尾递归进行优化,此article中有一个解释。

实际上,这意味着python限制了函数可以调用自身的次数(如果不调用,最终将导致堆栈溢出)。您可以像使用setrecursionlimit一样更改该限制,但从根本上说,限制将一直存在。

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

© www.soinside.com 2019 - 2024. All rights reserved.