如何在 python tkinter 中的函数后停止此操作

我正在尝试制作一个秒表程序,每当我按下按钮运行它时,函数 def watch() 都会继续执行,我无法在需要时停止它。


有什么方法可以在按下按钮后停止执行 def watch() 函数?


感谢您...


from tkinter import *


root = Tk()


tog = 0


hour = 0

mins = 0

sec = 0



def toggle():

    global tog

    tog = tog + 1


    if tog == 1:

        watch()

    elif tog == 2:

        stop()

        tog = 0


def stop():

    donothing = 0


def watch():

    global sec

    global hour

    global mins


    sec = sec + 1

    l1.config(text=sec)

    l1.after(1000,watch)




    l1 = Label(root)

    l1.pack()


Button(root,text="Start",command= lambda: toggle()).pack()


root.mainloop()


慕慕森
浏览 282回答 2
2回答

牛魔王的故事

您应该保留对调用的引用,并在isafter时取消回调。您可以通过使用可以读取或设置其值的对象的变量来避免丑陋的声明。toggleFalseglobaltkinterimport tkinter as tkdef toggle_on_off():    toggle.set(not toggle.get())    if toggle.get():        watch()def watch():    count_seconds.set(count_seconds.get() + 1)    if toggle.get():        _callback_id.set(root.after(1000, watch))    else:        root.after_cancel(_callback_id.get())        root = tk.Tk()count_seconds = tk.IntVar(root)count_seconds.set(0)toggle = tk.BooleanVar(root)toggle.set(False)Button(root,text="Start",command=toggle_on_off).pack()label = tk.Label(root, textvariable=count_seconds)label.pack()_callback_id = tk.StringVar(root)_callback_id.set(None)root.mainloop()[编辑]与全局变量相同的代码是这样的:import tkinter as tkdef toggle_on_off():    global toggle    toggle = not toggle    if toggle:        watch()def watch():    global count_seconds, _callback_id    count_seconds += 1    label.configure(text=str(count_seconds))    if toggle:        _callback_id = root.after(1000, watch)    else:        root.after_cancel(_callback_id)        root = tk.Tk()count_seconds = 0toggle = FalseButton(root,text="Start",command=toggle_on_off).pack()label = tk.Label(root, text=str(count_seconds))label.pack()_callback_id = Noneroot.mainloop()

天涯尽头无女友

您可以添加一个全局变量,例如“exit”,并在 l1.after(1000,watch) 之前添加 if 语句def toggle():    global tog, exit    exit = False    tog = tog + 1    if tog == 1:        watch()    elif tog == 2:        stop()        tog = 0def watch():    global sec    global hour    global mins    global exit    sec = sec + 1    l1.config(text=sec)    if not exit:        l1.after(1000,watch)在 stop() 中,你可以写def stop():    global exit    exit = True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python