无法加载具有相应日期的日历
Can't load calendar with corresponding date
from tkinter import *
from tkcalendar import Calendar
def get_date():
label.configure(text=str(today.get_displayed_month()))
today.configure(day=str(today.get_date()))
win = Tk()
win.title('Calendar Picker')
label = Label(win,text='August 2020')
label.pack(pady=10)
btn = Button(win,text='Pick a date',command=get_date)
btn.pack(pady=10)
today = Calendar(win,selectmode='day',year=2020,month=8,day=6)
today.pack(pady=10)
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "E:\Python\Python Projects Fun\calproject.py", line 6, in get_date
today.configure(day=str(today.get_date()))
File "C:\Python38\lib\site-packages\tkcalendar\calendar_.py", line 1612, in configure
self[item] = value
File "C:\Python38\lib\site-packages\tkcalendar\calendar_.py", line 518, in __setitem__
raise AttributeError("Calendar object has no attribute %s." % key)
AttributeError: Calendar object has no attribute day.
抱歉,当我按下按钮时'Pick a date'然后出现了上面的错误。请问移动月份的时候想要在window上面显示相应的日期应该怎么用呢?因为我不清楚文档所以有人可以教我这个方法吗?修复上述错误的最佳方法是什么?
错误是因为 day
选项仅在您创建 Calendar
实例时可用。它在 configure()
函数中不可用。
如果您想在月份更改时更新 label
,您可以绑定 <<CalendarMonthChanged>>
事件并在事件回调中更新 label
:
def on_month_changed(event):
month, year = today.get_displayed_month()
label.configure(text=today._month_names[month]+' '+str(year))
...
today = Calendar(win, selectmode='day', year=2020, month=8, day=6)
today.pack(pady=10)
today.bind('<<CalendarMonthChanged>>', on_month_changed)
更新:如果你想select在月份更改后的同一天,修改get_date()
函数如下:
import calendar
...
def get_date():
month, year = today.get_displayed_month()
# get the last day of selected month
_, lastday = calendar.monthrange(year, month)
# make sure day is valid day in selected month
day = min(today._sel_date.day, lastday)
# select the day in selected month
today.selection_set(today.date(year, month, day))
更新 2: 下面是一个更新日历的例子,当一个日期是 selected 通过 tkcalendar.DateEntry
:
from tkinter import *
from tkcalendar import Calendar, DateEntry
def date_selected(event):
date = date_entry.get_date()
cal.selection_set(date)
win = Tk()
win.title('Calendar Picker')
date_entry = DateEntry(win, date_pattern='y-mm-dd', state='readonly')
date_entry.pack()
date_entry.bind('<<DateEntrySelected>>', date_selected)
cal = Calendar(win, selectmode='day', date_pattern='y-mm-dd')
cal.pack(pady=10)
win.mainloop()
from tkinter import *
from tkcalendar import Calendar
def get_date():
label.configure(text=str(today.get_displayed_month()))
today.configure(day=str(today.get_date()))
win = Tk()
win.title('Calendar Picker')
label = Label(win,text='August 2020')
label.pack(pady=10)
btn = Button(win,text='Pick a date',command=get_date)
btn.pack(pady=10)
today = Calendar(win,selectmode='day',year=2020,month=8,day=6)
today.pack(pady=10)
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "E:\Python\Python Projects Fun\calproject.py", line 6, in get_date
today.configure(day=str(today.get_date()))
File "C:\Python38\lib\site-packages\tkcalendar\calendar_.py", line 1612, in configure
self[item] = value
File "C:\Python38\lib\site-packages\tkcalendar\calendar_.py", line 518, in __setitem__
raise AttributeError("Calendar object has no attribute %s." % key)
AttributeError: Calendar object has no attribute day.
抱歉,当我按下按钮时'Pick a date'然后出现了上面的错误。请问移动月份的时候想要在window上面显示相应的日期应该怎么用呢?因为我不清楚文档所以有人可以教我这个方法吗?修复上述错误的最佳方法是什么?
错误是因为 day
选项仅在您创建 Calendar
实例时可用。它在 configure()
函数中不可用。
如果您想在月份更改时更新 label
,您可以绑定 <<CalendarMonthChanged>>
事件并在事件回调中更新 label
:
def on_month_changed(event):
month, year = today.get_displayed_month()
label.configure(text=today._month_names[month]+' '+str(year))
...
today = Calendar(win, selectmode='day', year=2020, month=8, day=6)
today.pack(pady=10)
today.bind('<<CalendarMonthChanged>>', on_month_changed)
更新:如果你想select在月份更改后的同一天,修改get_date()
函数如下:
import calendar
...
def get_date():
month, year = today.get_displayed_month()
# get the last day of selected month
_, lastday = calendar.monthrange(year, month)
# make sure day is valid day in selected month
day = min(today._sel_date.day, lastday)
# select the day in selected month
today.selection_set(today.date(year, month, day))
更新 2: 下面是一个更新日历的例子,当一个日期是 selected 通过 tkcalendar.DateEntry
:
from tkinter import *
from tkcalendar import Calendar, DateEntry
def date_selected(event):
date = date_entry.get_date()
cal.selection_set(date)
win = Tk()
win.title('Calendar Picker')
date_entry = DateEntry(win, date_pattern='y-mm-dd', state='readonly')
date_entry.pack()
date_entry.bind('<<DateEntrySelected>>', date_selected)
cal = Calendar(win, selectmode='day', date_pattern='y-mm-dd')
cal.pack(pady=10)
win.mainloop()