2016-04-21 12 views
2

Mein Ziel ist es, ein einfaches Timer-Programm zu erstellen. Es aktualisiert sich ständig, bis der StopButton gedrückt wird. Ich bin mir jedoch nicht sicher, wie ich die Tick-Funktion stoppen kann, so dass der Timer gleich bleibt, wenn der StopButton gedrückt wird.Wie kann ich einen Timer in Python (tkinter) stoppen?

Dies ist mein Code so weit:

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

Was für eine Art und Weise des Anhaltens der tick() Funktion sein würde?

Jede Hilfe würde sehr geschätzt werden!

Antwort

3

Sie können ein anderes globales Objekt verwenden, das verfolgt, ob Sie derzeit Ticks zählen sollen. Wenn Sie keine Ticks zählen sollen, lassen Sie einfach tick nichts tun (und registrieren Sie sich nicht erneut).

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

Es gibt noch weitere strukturelle Verbesserungen, die (unter Verwendung einer Klasse der Globals loszuwerden) gemacht werden könnten und Stil Verbesserungen (snake_case statt camelCase), aber dies sollte erhalten Sie in die richtige Richtung ...

+0

Dies ist genau das, was ich gesucht habe. Vielen Dank! –

Verwandte Themen