You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:00:46