鱼C论坛

 找回密码
 立即注册
查看: 31|回复: 1

Tkinter 循 环 显 示 的 程 序

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. from tkinter import *
  2. import time
  3. root = Tk()
  4. n = ["冬瓜","南瓜","西瓜","窝瓜","黄瓜","香瓜","菜瓜","哈密瓜","苦瓜"]
  5. m = Button(root, text=n[0])
  6. m.pack()

  7. def melon():
  8.     for i in range(len(n)):
  9.         m.config(text=n[i])
  10.         root.update()
  11.         time.sleep(3)
  12.     m.after(3000, melon)

  13. melon()
  14. mainloop()
复制代码


程序退出时,报错 ? 如何解决 ?
22.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 5 小时前 | 显示全部楼层
根据您提供的代码,存在几个问题:变量 n 未正确赋值,melon 函数中循环逻辑有误,并且程序退出时因 after 回调仍在执行而报错。下面给出修正方案和原因说明。

问题原因
退出时报错是因为 root.after(3000, melon) 在窗口关闭后仍被调用,此时控件已不存在,访问 m.config() 会触发 TclError 异常。

修正示例
使用 after 代替 time.sleep,并在每次回调前检查窗口是否还存在。


  1. from tkinter import *

  2. root = Tk()

  3. texts = ["A", "B", "C"]  # 要循环显示的文本列表
  4. index = 0

  5. m = Button(root, text=texts[0])
  6. m.pack()

  7. def update_text():
  8.     global index
  9.     # 更新按钮文本
  10.     m.config(text=texts[index])
  11.     index = (index + 1) % len(texts)
  12.     # 仅在窗口存在时调度下一次更新
  13.     if root.winfo_exists():
  14.         root.after(3000, update_text)

  15. update_text()
  16. root.mainloop()
复制代码


说明
  • 用列表 texts 存储要显示的文本。
  • 用全局变量 index 追踪当前显示位置,每次更新后取模实现循环。
  • 调用 root.after(3000, update_text) 实现 3 秒后自动更新,避免阻塞主循环。
  • update_text 内部使用 root.winfo_exists() 判断窗口是否仍然存在,若存在才调度下一次更新,从而消除退出时的报错。


如果坚持使用循环+time.sleep
也可以使用 try...except 捕获异常,但不推荐,因为 sleep 会阻塞界面响应。


  1. def melon():
  2.     try:
  3.         for i in range(len(texts)):
  4.             m.config(text=texts[i])
  5.             root.update()
  6.             time.sleep(3)
  7.     except:
  8.         pass
  9.     root.after(3000, melon)
复制代码


但建议采用第一个示例,更优雅且符合 Tkinter 事件驱动机制。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-6-8 23:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表