使用tkcalendar标记日历事件时出现'int' object is not callable错误求助
问题原因与解决方法
错误根源
你遇到的TypeError: 'int' object is not callable是因为变量名冲突:
- 你用
date = canvas.create_text(50, 100, text="Date: ", font=("Helvetica", 14))这行代码,把date变量赋值成了canvas.create_text返回的整数ID(画布元素的标识)。 - 之后再写
day = date(2024, 3, 15)时,Python会把date当成那个整数,而不是datetime模块里的date类,自然无法像函数一样调用,触发错误。
解决步骤
- 重命名冲突变量:把
date变量改成其他名称,比如date_text_id,避免覆盖datetime.date类。 - 正确引用日期类:确保你能正确调用
datetime.date——如果导入语句是import datetime,就用datetime.date(2024,3,15);如果是from datetime import date,直接用date(2024,3,15)即可。
修正后的完整代码片段
testPage=Toplevel() testPage.title("New Booking") testPage.geometry("1366x768") canvas=Canvas(testPage, width=1366, height=768) canvas.pack() frame=Frame(testPage) topbar=canvas.create_rectangle(0,0, 1366,30, fill="gray") lblDate=canvas.create_text(400,300, text="") # 重命名变量,避免和datetime.date冲突 date_text_id=canvas.create_text(50, 100, text="Date: ", font=("Helvetica", 14)) date_today=datetime.now() cal=Calendar(testPage, width=12, background='saddle brown', foreground='white', mindate=date_today, disabledforeground='red') cal.place(x=150, y=100) # 正确调用datetime.date类 day=datetime.date(2024, 3, 15) # 如果是from datetime import date,就写day=date(2024,3,15) cal.calevent_create(day, "", tags="test") cal.tag_config("test", background="red")
额外注意
- 确保你的导入语句包含所需类,比如开头加:
from tkinter import Toplevel, Canvas, Frame from tkcalendar import Calendar from datetime import datetime, date - 这样修改后,2024年3月15日的日历单元格会被标记为红色背景,符合你的需求。
内容的提问来源于stack exchange,提问作者j.jam
相关产品推荐
相关产品推荐

