In this tutorial, we will create a Windows Calendar app using Python Tkinter. The app will display a calendar with the current month and year, and users will be able to navigate to different months and years. We will also add the ability to highlight specific dates and add events to the calendar.
To create the Windows Calendar app, we will be using the Tkinter library, which is the standard GUI toolkit for Python. Tkinter provides us with the necessary tools to create and manage the graphical user interface of the application.
Let’s get started by importing the necessary modules and setting up the basic structure of our application.
import calendar
import tkinter as tk
from tkinter import messagebox
class CalendarApp:
def __init__(self, root):
self.root = root
self.root.title("Windows Calendar App")
self.cal = calendar.TextCalendar(calendar.SUNDAY)
self.year = tk.IntVar()
self.month = tk.IntVar()
self.year.set(2023)
self.month.set(1)
self.create_widgets()
self.show_calendar()
def create_widgets(self):
# Create a frame to hold the calendar and navigation buttons
self.main_frame = tk.Frame(self.root)
self.main_frame.pack(padx=20, pady=20)
# Create a label for the title
self.title_label = tk.Label(self.main_frame, text="Calendar App", font=("Helvetica", 16))
self.title_label.pack()
# Create a frame to hold the navigation buttons
self.nav_frame = tk.Frame(self.main_frame)
self.nav_frame.pack()
# Create buttons for navigating to the previous month and next month
self.prev_month_btn = tk.Button(self.nav_frame, text="< Prev Month", command=self.prev_month)
self.prev_month_btn.pack(side=tk.LEFT)
self.next_month_btn = tk.Button(self.nav_frame, text="Next Month >", command=self.next_month)
self.next_month_btn.pack(side=tk.RIGHT)
# Create a calendar widget
self.calendar_widget = tk.Text(self.main_frame, height=7, width=20)
self.calendar_widget.pack()
# Create a frame to hold the event entry widget and button
self.event_frame = tk.Frame(self.main_frame)
self.event_frame.pack()
# Create an entry widget for entering events
self.event_entry = tk.Entry(self.event_frame, width=20)
self.event_entry.pack(side=tk.LEFT)
# Create a button for adding events to the calendar
self.add_event_btn = tk.Button(self.event_frame, text="Add Event", command=self.add_event)
self.add_event_btn.pack(side=tk.RIGHT)
def show_calendar(self):
month_calendar = self.cal.formatmonth(self.year.get(), self.month.get())
self.calendar_widget.insert(tk.END, month_calendar)
def prev_month(self):
self.calendar_widget.delete(1.0, tk.END)
self.month.set(self.month.get() - 1)
if self.month.get() == 0:
self.year.set(self.year.get() - 1)
self.month.set(12)
self.show_calendar()
def next_month(self):
self.calendar_widget.delete(1.0, tk.END)
self.month.set(self.month.get() + 1)
if self.month.get() == 13:
self.year.set(self.year.get() + 1)
self.month.set(1)
self.show_calendar()
def add_event(self):
event_text = self.event_entry.get()
if event_text:
messagebox.showinfo("Event added", f"Event '{event_text}' added to the calendar!")
else:
messagebox.showwarning("Error", "Please enter an event text.")
if __name__ == "__main__":
root = tk.Tk()
app = CalendarApp(root)
root.mainloop()
In this code, we first import the necessary modules and define the CalendarApp
class, which is responsible for creating and managing the calendar app. We set the initial values for the year and month using IntVar
objects and create the basic structure of the app using labels, buttons, and text widgets.
The show_calendar
method is used to display the calendar for the current month and year. We use the formatmonth
method of the TextCalendar
class to generate the calendar text and insert it into the calendar widget.
The prev_month
and next_month
methods are used for navigating to the previous and next months, respectively. These methods update the month and year values and then call the show_calendar
method to display the calendar for the new month.
The add_event
method is used for adding events to the calendar. It retrieves the text entered in the event entry widget and displays a message box with the event text if it is not empty.
Finally, we create an instance of the CalendarApp
class and start the Tkinter main event loop to run the application.
You can run this code in your Python environment to create a simple Windows Calendar app with navigation and event adding functionality. Feel free to customize the app further by adding more features and design elements to make it more user-friendly and interactive.
good
Nice 👍