【问题标题】:How do I stop a timer in Python (tkinter)? [closed]如何在 Python (tkinter) 中停止计时器? [关闭]
【发布时间】:2016-08-15 03:06:27
【问题描述】:

我的目标是创建一个简单的计时器程序。它会不断更新自己,直到按下 stopButton。但是,我不确定如何停止运行滴答功能,以便在按下 stopButton 后计时器保持不变。

这是我目前的代码:

import tkinter

root = tkinter.Tk()
root.title('Timer')
root.state('zoomed')

sec = 0

def tick():
    global sec

    sec += 0.1
    sec = round(sec,1)
    timeLabel.configure(text=sec)
    root.after(100, tick)

def stop(): 
    # stop the timer from updating.

timeLabel = tkinter.Label(root, fg='green',font=('Helvetica',150))
timeLabel.pack()

startButton = tkinter.Button(root, text='Start', command=tick)
startButton.pack()

stopButton = tkinter.Button(root, text='Stop', command=stop)
stopButton.pack()

root.mainloop()

停止tick() 函数的可能方法是什么?

任何帮助将不胜感激!

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可以使用另一个全局变量来跟踪您当前是否应该计算滴答声。如果您不应该计算滴答声,只需让tick 什么都不做(并且不要再次注册自己)。

    import tkinter
    
    root = tkinter.Tk()
    root.title('Timer')
    root.state('zoomed')
    
    sec = 0
    doTick = True
    
    def tick():
        global sec
        if not doTick:
            return
        sec += 0.1
        sec = round(sec,1)
        timeLabel.configure(text=sec)
        root.after(100, tick)
    
    def stop():
        global doTick
        doTick = False
    
    def start():
        global doTick
        doTick = True
        # Perhaps reset `sec` too?
        tick()
    
    timeLabel = tkinter.Label(root, fg='green',font=('Helvetica',150))
    timeLabel.pack()
    
    startButton = tkinter.Button(root, text='Start', command=start)
    startButton.pack()
    
    stopButton = tkinter.Button(root, text='Stop', command=stop)
    stopButton.pack()
    
    root.mainloop()
    

    还有其他可以进行的结构改进(使用类来摆脱全局变量)和样式改进(snake_case 而不是camelCase),但这应该会让你指向正确的方向......

    【讨论】:

    • 这正是我想要的。非常感谢!
    • 这有一个设计缺陷。如果您在计时器到期之前调用停止然后再次调用开始,则下一个间隔将不是正确的时间段。事实上,您可能会得到 2 个事件而不是 1 个,因此时间会中断。您应该使用返回值来取消事件
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2012-05-29
    相关资源
    最近更新 更多