李喆祎 2024-06-05 21:13 采纳率: 60%
浏览 14
已结题

Python tkinter 结束after方法启动的函数

Python tkinter模块中利用after方法启动的函数怎么终止?
(我的意思是,after启动了一个会运行很久的一个函数,它大概是一个while True循环,而我想让它在我想要的时候停止,并且不在那个循环里加东西)

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-05 21:13
    关注

    引自免费微信小程序:皆我百晓生

    在 Python 的 Tkinter 模块中,如果你使用 after 方法启动了一个长运行的函数,比如一个无限循环,你可以通过保存一个计时器 ID 来取消这个定时器。after 方法返回一个计时器 ID,你可以将其存储在一个变量中,然后在需要时使用 after_cancel 方法来取消这个定时器。

    下面是一个例子,展示如何启动和停止一个无限循环的函数:

    import tkinter as tk
    
    def long_running_function():
        while True:
            # 这里是你的长运行逻辑
            print("Running...")
            root.update_idletasks()
            root.update()
    
    # 创建主窗口
    root = tk.Tk()
    
    # 保存计时器ID
    timer_id = None
    
    def start_long_running():
        global timer_id
        timer_id = root.after(100, long_running_function)  # 每隔100毫秒执行一次
    
    def stop_long_running():
        if timer_id is not None:
            root.after_cancel(timer_id)
            timer_id = None
    
    # 添加按钮用于启动和停止长运行函数
    start_button = tk.Button(root, text="Start", command=start_long_running)
    stop_button = tk.Button(root, text="Stop", command=stop_long_running)
    
    start_button.pack()
    stop_button.pack()
    
    root.mainloop()
    

    在这个例子中,我们有两个按钮:一个用于启动长运行函数,另一个用于停止它。当点击"Start"按钮时,长运行函数开始执行,每100毫秒更新一次。当点击"Stop"按钮时,我们通过计时器ID取消了定时器,从而停止了长运行函数的执行。

    注意:这里使用 root.update_idletasks()root.update() 是为了确保Tkinter事件循环得到更新,以便及时响应用户的操作。在实际应用中,根据你的具体需求,可能需要调整这些调用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 6月5日

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器