«Tkinter « tkcalendar
In our calendar we can use the option mindate and maxdate to disable any dates before mindate and after maxdate.
Here from 3rd Aug 2021 ( minimum date ) to 25th Aug 2021 ( maximum date ) are available for selection.

import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar
from datetime import date
my_w = tk.Tk()
my_w.geometry("380x220")
dt = date.today() # today
dt1=date(2021,8,3) # specific date Year, month , day
dt2=date(2021,8,25) # Maximum date in Year, month , day
cal=Calendar(my_w,selectmode='day',mindate=dt1,maxdate=dt2)
cal.grid(row=1,column=1,padx=15)
my_w.mainloop()
Today's Date with mindate & maxdate
We can allow to select all future dates including today by using mindate option.
import tkinter as tk
from tkcalendar import Calendar
from datetime import datetime
my_w = tk.Tk()
my_w.geometry("320x210")
date_today = datetime.now() # today's date
cal=Calendar(my_w,selectmode='day', mindate=date_today)
cal.grid(row=1,column=1,padx=15)
my_w.mainloop()
We can disable selection of all future dates by using maxdate option
cal=Calendar(my_w,selectmode='day', maxdate=date_today)
Using timedelta
Select all days till tomorrow ( use timedelta )
from datetime import timedelta,date,datetime
dt = date.today() + timedelta(days=1) # Tomorrow
cal=Calendar(my_w,selectmode='day',maxdate=dt)
Select all days starting from yesterday
dt = date.today() + timedelta(days=-1) # Yesterday
cal=Calendar(my_w,selectmode='day',mindate=dt)
Using relativedelta
More about relativedelta.
The variable dt can be used to set mindate or maxdate based on requirment
from dateutil.relativedelta import relativedelta
from datetime import date
dt = date.today() + relativedelta(days=1))# tomorrow
Check how future dates are enabled using relativedelta.
import tkinter as tk
from tkcalendar import Calendar
from dateutil.relativedelta import relativedelta
from datetime import date
my_w = tk.Tk()
my_w.geometry("320x210")
dt = date.today() + relativedelta(years=1,months=2,days=3)
cal=Calendar(my_w,selectmode='day',maxdate=dt,mindate=date.today())
cal.grid(row=1,column=1,padx=15)
my_w.mainloop()
Dynamic minimum date and maximum date
Once the user clicks a date, it became minimum date ( or start date ) and 10 days after this date became the maximum date ( or end date ). Read more about timedelta() and other data parameters to add or subtract.
Add one Reset button to restore the initial stage so user can select again.
import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar
from datetime import timedelta,date,datetime
my_w = tk.Tk()
my_w.geometry("380x220")
sel=tk.StringVar()
def my_upd(*args): # triggered when value of string varaible changes
dt1=cal.selection_get() # minmum date
dt2=dt1 + timedelta(days=10) # maximum date, added 10 days
cal.config(mindate=dt1) # set minimum date
cal.config(maxdate=dt2) # set maximum date
cal=Calendar(my_w,selectmode='day',textvariable=sel)
cal.grid(row=1,column=1,padx=15)
b1=tk.Button(my_w,text='Reset'
,command=lambda:cal.config(mindate=None,maxdate=None))
b1.grid(row=2,column=1)
sel.trace('w',my_upd) # on change of string variable
my_w.mainloop()
Example
This is an example only to understand how to set the maximum and minimum dates.
Based on the date for first dose of vaccination, the range of dates available for second dose is decided. Here after 10 days of first does, the eligibility of 2nd does is started. But 2nd does is be taken within 15 days of eligibility.
Changes in the above script is here.
days_gap=10 #Minimum gap to be maintained
end_date=15 #Within this range 2nd does to be taken
def my_upd(*args): # triggered when value of string varaible changes
dt1=cal.selection_get() + timedelta(days=days_gap) # Start for 2nd dose
dt2=dt1 + timedelta(days=end_date) # end date for 2nd dose
cal.config(mindate=dt1) # set minimum date
cal.config(maxdate=dt2) # set maximum date
« Read the list of formats used in displaying Date and time tkcalendar DateEntry
Projects in Tkinter
← Subscribe to our YouTube Channel here