如何在Python(tkinter)中停止计时器?

时间:2016-04-21 18:26:39

标签: python tkinter

我的目标是创建一个简单的计时器程序。它会不断更新,直到按下 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()功能的可能方法?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用另一个全局来跟踪您当前是否应该计算滴答数。如果你不应该计算滴答声,只需要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),但这应该让你指向右边方向...