Python 如何将计数器再次设置为30,并将其停止在0?

Python 如何将计数器再次设置为30,并将其停止在0?,python,python-3.x,counter,Python,Python 3.x,Counter,我有一个计数器用于我的脚本,从30开始计数,我希望它停止在0。然后,如果我按下一个按钮,我想把它设置回30,它应该再次开始倒计时。这是我目前的代码: counter = 30 def counter_label(label): def count(): global counter counter -= 1 zähler.config(text=str(counter)) zähler.after(1000, count)

我有一个计数器用于我的脚本,从30开始计数,我希望它停止在0。然后,如果我按下一个按钮,我想把它设置回30,它应该再次开始倒计时。这是我目前的代码:

counter = 30

def counter_label(label):
    def count():
        global counter
        counter -= 1
        zähler.config(text=str(counter))
        zähler.after(1000, count)
    count()

zähler = Label(fg="black")
zähler.grid(row=0, column=0)
zähler.after(29000, jokerfragen)#Does something important for my script.

zähler.config(text="30")
counter_label(zähler)

通过使用
for
循环,而不是使用函数,可以完成完全相同的事情。这样,
计数器
变量就变得不必要了,代码也就更容易理解和修改。下面是一个例子:

def counter_label():
    for counter in range(30, -1, -1): # loops backwards from 30 up to and including 0
        zähler.config(text = str(counter))
        zähler.after(1000, count)
每当按下按钮时,只需调用计数器标签即可,它将再次从30循环到0

编辑

作为对您评论的回应,请使用以下代码:

def counter_label():
    while True: # keeps looping forever
        for counter in range(30, -1, -1): # loops backwards from 30 up to and including 0
            zähler.config(text = str(counter))
            zähler.after(1000, count)
        sleep(1000) # waits 1000ms

通过执行
counter%=30
,您可以在计数器达到-1时将其重置为29,这与您已有的计数器相同

有很多方法可以满足您的要求,但许多方法取决于上下文。如前所述,我不能说我理解您代码的上下文。例如,我不知道Label()函数是什么。如果下面关于使用for循环的答案没有帮助,我认为您需要将代码重写为一个独立脚本,以更符合上下文的方式捕获您的代码question@VinceWest标签来自trom tkinter,用于graphic@Florian,是此行中关于计数器的错误:
zähler.after(1000,计数器)
?也许它本来应该是
count
(起初我以为这是个错误)。如果不是,请您描述一下错误情况好吗?@Florian,好的,使用
范围(30,-1,-1)
代替。TypeError:counter_label()接受0个位置参数,但1是given@Florian,您仍然将
label
作为参数传递,尽管此函数不需要任何参数。(我删除了它,因为它没有用。)但我需要它作为标签,因为它需要在Tkinter窗口中显示
def counter_label(label):
    def count():
        global counter
        counter -= 1
        counter %= 30
        zähler.config(text=str(counter))
        zähler.after(1000, count)
    count()