使用Python Tkinter开发简易闹钟程序遇运行报错问题求助
Tkinter简易闹钟运行故障修复方案
报错根因
两个报错均为笔误或环境使用错误,无复杂兼容性问题:
_tkinter.TclError提示无效选项-achor:属于拼写笔误,本地代码中pack布局的anchor参数漏写字母n,错写为achor。另外代码同时通配符导入tkinter和tkinter.ttk的所有内容,ttk库的Label组件会覆盖原生tk的Label,ttk组件不支持直接传入background、foreground参数,即使修正拼写也可能出现样式兼容报错。- Python交互环境下的
SyntaxError:属于运行环境混淆,将终端(cmd/powershell/bash)支持的带&的后台运行命令,输入到了Python交互式解释器(带>>>提示符的REPL环境)中,&是shell语法而非Python语法,直接触发语法错误。
除此之外,现有闹钟逻辑还有两个隐藏问题:一是时间匹配条件带%p(AM/PM标识),不同系统/区域配置下strftime返回的%p可能为小写、本地语言格式,极易匹配失败;二是到达设定时间后,每秒都会执行触发逻辑,重复打印提示内容。
修复步骤
- 修正导入逻辑:删除ttk库的通配符导入,避免组件覆盖冲突,原生tk的
Label组件可直接支持前景色、背景色设置,更适合当前时钟场景。 - 检查本地代码所有pack布局参数,确认拼写为
anchor(完整拼写为a-n-c-h-o-r),不要漏写字母。 - 纠正脚本运行方式:不要在Python REPL环境中输入shell命令,要么在VS Code的集成终端中执行
python 你的脚本文件名.py运行,要么直接点击VS Code右上角的运行按钮启动脚本。 - 优化闹钟逻辑:增加触发标记避免重复提示,改用24小时制时间匹配规避AM/PM格式差异问题,过了设定时间自动重置标记方便次日触发。
修复后可运行完整代码
from tkinter import * from time import strftime root = Tk() root.title("Digital Clock") root.geometry("600x510") root.configure(background="black") label = Label(root, font=('sans', 80), background="black", foreground="red") credit_label = Label(root, text="Krishna made this ", font=('sans', 20), background="black", foreground="red") label.pack(anchor='center') credit_label.pack(anchor="center") alarm_triggered = False # 修改这里的时间即可调整闹钟,格式为24小时制"时:分:秒" ALARM_TIME = "19:00:00" def clock(): global alarm_triggered current_time_full = strftime('%H:%M:%S %p') current_time_hms = strftime('%H:%M:%S') label.config(text=current_time_full) if current_time_hms == ALARM_TIME and not alarm_triggered: print("Wake up") alarm_triggered = True if current_time_hms != ALARM_TIME: alarm_triggered = False label.after(1000, clock) clock() mainloop()
注意事项
如果需要修改闹钟时间,直接调整代码中
ALARM_TIME变量的赋值即可,例如设置早上7点10分的闹钟就写为ALARM_TIME = "07:10:00"。
如果修正后仍报-achor相关错误,逐行检查本地保存的代码里所有pack()方法的参数,贴出的示例代码中参数拼写正确,大概率是本地文件仍存在拼写笔误。
内容的提问来源于stack exchange,提问作者Krishna Singh
相关产品推荐
相关产品推荐

