In our DateEntry 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.
DateEntry Maxdate Mindate options to dynamically change the available date range in Tkinter GUI
import tkinter as tk
from tkcalendar import DateEntry
from datetime import date
my_w = tk.Tk()
my_w.geometry("320x210")
dt1=date(2021,8,3) # Minimum date for selection
dt2=date(2021,8,25) # Maximum date for selection
cal=DateEntry(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 DateEntry
from datetime import datetime
my_w = tk.Tk()
my_w.geometry("320x210")
date_today = datetime.now() # today's date
cal=DateEntry(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
Add one Reset button to restore the initial stage so user can select again.
import tkinter as tk
from tkcalendar import DateEntry
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
dt=sel.get()#cal.selection_get() # minmum date
#print(dt + ": "+str(len(dt)))
if(len(dt)>3): # when dt is having date selection
dt1 = datetime.strptime(dt,'%m/%d/%y') # create date type
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=DateEntry(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=1,column=2)
sel.trace('w',my_upd) # on change of string variable
my_w.mainloop()
Reset to today's date
We are resetting the maxdate and mindate on Click of a button. We can trigger a function and then reset the maxdate , mindate and also reset the calendar to current date. Here is the code inside the function reset()
def reset():
date_today = datetime.now() # today's date
cal.set_date(date_today) # before resetting min & max date
cal.config(mindate=None) # reset mindate
cal.config(maxdate=None) # reset maxdate
We can modify the button code to trigger the above function