tkcalendar组件周起始日设为周日时日期显示异常求助
tkcalendar日历日期显示异常排查(仅周起始日设为周日时出错)
问题概述
运行代码时日历显示的日期与实际不符,但将firstweekday设为'monday'即可正常显示。上周运行代码无异常,单独打印年、月、日变量结果正确。
原代码
from tkinter import * from tkcalendar import * import time root= Tk() Y= int (time.strftime('%Y')) M= int(time.strftime('%m')) D= int(time.strftime("%d")) cal= Calendar(root, year=Y, month=M, day=D,firstweekday='sunday', selectmode='none) cal.grid(row=1, column=0) root.mainloop()
问题原因与修复方案
1. 语法错误:缺少闭合引号
原代码中selectmode='none)的单引号未闭合,这是基础语法错误,会导致代码运行报错(若你上周运行正常,大概率是输入时的笔误)。
2. firstweekday参数取值错误
tkcalendar的firstweekday参数不接受字符串类型的sunday/monday,正确取值为:
- 整数:0代表周一,1代表周二……6代表周日
calendar模块的常量:如calendar.SUNDAY(对应6)、calendar.MONDAY(对应0)
当传入错误的字符串参数时,组件解析逻辑混乱,导致日历日期排版错误;而传入'monday'时可能被意外解析为整数0(对应周一),因此能正常显示。
修正后的代码
from tkinter import * from tkcalendar import * import time import calendar root = Tk() Y = int(time.strftime('%Y')) M = int(time.strftime('%m')) D = int(time.strftime("%d")) # 补全引号,使用calendar常量设置周日为周起始日 cal = Calendar(root, year=Y, month=M, day=D, firstweekday=calendar.SUNDAY, selectmode='none') cal.grid(row=1, column=0) root.mainloop()
关于“上周正常”的推测
可能是上周的日期刚好处于特殊排版(比如当月第一天为周一),参数错误未触发显示异常;或是你之前的代码中firstweekday参数为正确的整数/常量,后续修改时误改为字符串。
内容的提问来源于stack exchange,提问作者RM2020
相关产品推荐
相关产品推荐

