I'm trying to make a tkinter app where the user can select a date range. The Tkcalendar library only allows to select 1 day, is there a way to select multiple continuous days?
Thank you very much
You can create two calendars and then choose two dates and then find the range between those two dates. The core function would be:
def date_range(start,stop): # Start and stop dates for range
dates = [] # Empty list to return at the end
diff = (stop-start).days # Get the number of days between
for i in range(diff+1): # Loop through the number of days(+1 to include the intervals too)
day = first + timedelta(days=i) # Days in between
dates.append(day) # Add to the list
if dates: # If dates is not an empty list
return dates # Return it
else:
print('Make sure the end date is later than start date') # Print a warning
Now to put things in tkinter
perspective, button callbacks cannot return
anything, so this should be something like:
from tkinter import *
import tkcalendar
from datetime import timedelta
root = Tk()
def date_range(start,stop):
global dates # If you want to use this outside of functions
dates = []
diff = (stop-start).days
for i in range(diff+1):
day = start + timedelta(days=i)
dates.append(day)
if dates:
print(dates) # Print it, or even make it global to access it outside this
else:
print('Make sure the end date is later than start date')
date1 = tkcalendar.DateEntry(root)
date1.pack(padx=10,pady=10)
date2 = tkcalendar.DateEntry(root)
date2.pack(padx=10,pady=10)
Button(root,text='Find range',command=lambda: date_range(date1.get_date(),date2.get_date())).pack()
root.mainloop()
Keep in mind, the list is full of datetime objects, to make a list full strings of date alone, say:
dates = [x.strftime('%Y-%m-%d') for x in dates] # In the format yyyy-mm-dd