tkcalendar mindate & maxdate options

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.
tkcalendar mindate and maxdate
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

* indicates required
Subscribe to plus2net

    plus2net.com



    Post your comments , suggestion , error , requirements etc here





    Python Video Tutorials
    Python SQLite Video Tutorials
    Python MySQL Video Tutorials
    Python Tkinter Video Tutorials
    We use cookies to improve your browsing experience. . Learn more
    HTML MySQL PHP JavaScript ASP Photoshop Articles FORUM . Contact us
    ©2000-2021 plus2net.com All rights reserved worldwide Privacy Policy Disclaimer