Python tkcalendar日期格式匹配报错ValueError求助
问题解决:tkcalendar DateEntry日期格式不匹配报错
核心问题分析
- 你用
datetime.strptime指定的格式%m%d%y要求日期是无分隔符的纯数字串(比如112122),但DateEntry.get()返回的是带斜杠分隔的11/21/22,格式不匹配直接触发ValueError。 - 额外问题:
DateEntry的textvariable参数不能直接传普通字符串,必须传入tkinter的StringVar()对象,否则该参数无法正常实现双向绑定功能。
修复后的完整代码
from datetime import datetime from tkinter import * from tkinter import messagebox from tkcalendar import DateEntry root = Tk() # 正确创建StringVar作为textvariable参数 DOB_var = StringVar(value="Date of Birth") time_now = datetime.now() # 显式指定date_pattern,统一日期格式避免环境差异 DOBEntry = DateEntry(root, selectmode="day", textvariable=DOB_var, date_pattern="mm/dd/yy") DOBEntry.place(x=100, y=520) def date_check(): # 匹配DateEntry的date_pattern格式解析日期 calendar_date = datetime.strptime(DOBEntry.get(), "%m/%d/%y") if calendar_date > time_now: messagebox.showerror("Invalid", "Selected date must not exceed current date") DOBEntry.set_date(time_now) root.after(100, date_check) root.after(100, date_check) print(DOBEntry) root.mainloop()
关键修复说明
- 格式统一:要么将
strptime的格式改为%m/%d/%y匹配带斜杠的返回值,要么给DateEntry设置date_pattern="mmddyy"让它返回无分隔符的日期串,两种方式二选一即可。 - 修正textvariable:用
StringVar()替代普通字符串作为参数,确保组件和变量的绑定逻辑正常。 - 规避环境差异:显式设置
date_pattern可以避免不同运行环境下DateEntry默认格式不一致的问题,这也是昨天正常今天突然报错的潜在原因。
内容的提问来源于stack exchange,提问作者dioscuri
相关产品推荐
相关产品推荐

