Tkinter does not have its own calendar widget. At least not by default. Here is a calendar selector widget. The Control class is just for laying a base program for testing. As well as show an example of calling the calendar widget. The choose button drops the calendar toplevel out, and is displayed in the current month and year. When you select OK, you save the date you selected shown in the label below and it disappears. Then in the test program you can see the date saved in a dictionary.
import calendar import datetime import sys if sys.version[0] == '2': import Tkinter as tk else: import tkinter as tk class Calendar: def __init__(self, parent, values): self.values = values self.parent = parent self.cal = calendar.TextCalendar(calendar.SUNDAY) self.year = datetime.date.today().year self.month = datetime.date.today().month self.wid = [] self.day_selected = 1 self.month_selected = self.month self.year_selected = self.year self.day_name = '' self.setup(self.year, self.month) def clear(self): for w in self.wid[:]: w.grid_forget() #w.destroy() self.wid.remove(w) def go_prev(self): if self.month > 1: self.month -= 1 else: self.month = 12 self.year -= 1 #self.selected = (self.month, self.year) self.clear() self.setup(self.year, self.month) def go_next(self): if self.month < 12: self.month += 1 else: self.month = 1 self.year += 1 #self.selected = (self.month, self.year) self.clear() self.setup(self.year, self.month) def selection(self, day, name): self.day_selected = day self.month_selected = self.month self.year_selected = self.year self.day_name = name #data self.values['day_selected'] = day self.values['month_selected'] = self.month self.values['year_selected'] = self.year self.values['day_name'] = name self.values['month_name'] = calendar.month_name[self.month_selected] self.clear() self.setup(self.year, self.month) def setup(self, y, m): left = tk.Button(self.parent, text='<', command=self.go_prev) self.wid.append(left) left.grid(row=0, column=1) header = tk.Label(self.parent, height=2, text='{} {}'.format(calendar.month_abbr[m], str(y))) self.wid.append(header) header.grid(row=0, column=2, columnspan=3) right = tk.Button(self.parent, text='>', command=self.go_next) self.wid.append(right) right.grid(row=0, column=5) days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] for num, name in enumerate(days): t = tk.Label(self.parent, text=name[:3]) self.wid.append(t) t.grid(row=1, column=num) for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2): for d, day in enumerate(week): if day: #print(calendar.day_name[day]) b = tk.Button(self.parent, width=1, text=day, command=lambda day=day:self.selection(day, calendar.day_name[(day-1) % 7])) self.wid.append(b) b.grid(row=w, column=d) sel = tk.Label(self.parent, height=2, text='{} {} {} {}'.format( self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected)) self.wid.append(sel) sel.grid(row=8, column=0, columnspan=7) ok = tk.Button(self.parent, width=5, text='OK', command=self.kill_and_save) self.wid.append(ok) ok.grid(row=9, column=2, columnspan=3, pady=10) def kill_and_save(self): self.parent.destroy() if __name__ == '__main__': class Control: def __init__(self, parent): self.parent = parent self.choose_btn = tk.Button(self.parent, text='Choose',command=self.popup) self.show_btn = tk.Button(self.parent, text='Show Selected',command=self.print_selected_date) self.choose_btn.grid() self.show_btn.grid() self.data = {} def popup(self): child = tk.Toplevel() cal = Calendar(child, self.data) def print_selected_date(self): print(self.data) root = tk.Tk() app = Control(root) root.mainloop()
Recommended Tutorials: BBcode, Forum Rules and Instructions, How to ask smart questions, the Basics, Classes, Python Gotchas