用Python编写一个简单的日历应用
发布时间:2023-12-04 11:40:32
下面是一个简单的日历应用的Python代码,它可以显示当前月份的日历,并且还提供了一些基本的功能,例如切换月份、添加事件等。使用tkinter库来创建用户界面,可以在不同的平台上运行。
import calendar
import tkinter as tk
from tkinter import messagebox
class CalendarApp:
def __init__(self, root):
self.root = root
self.root.title("日历应用")
self.current_year = tk.IntVar()
self.current_month = tk.IntVar()
self.current_day = tk.IntVar()
self.create_widgets()
self.show_current_month()
def create_widgets(self):
# 年份选择
self.year_frame = tk.Frame(self.root)
self.year_frame.pack(pady=10)
self.year_label = tk.Label(self.year_frame, text="年份:")
self.year_label.pack(side=tk.LEFT)
self.year_spinbox = tk.Spinbox(self.year_frame, from_=1900, to=2100,
textvariable=self.current_year, command=self.show_current_month)
self.year_spinbox.pack(side=tk.LEFT)
# 月份选择
self.month_frame = tk.Frame(self.root)
self.month_frame.pack(pady=10)
self.month_label = tk.Label(self.month_frame, text="月份:")
self.month_label.pack(side=tk.LEFT)
self.month_spinbox = tk.Spinbox(self.month_frame, from_=1, to=12,
textvariable=self.current_month, command=self.show_current_month)
self.month_spinbox.pack(side=tk.LEFT)
# 日历区域
self.calendar_frame = tk.Frame(self.root)
self.calendar_frame.pack(pady=10)
self.calendar_label = tk.Label(self.calendar_frame, text="", justify=tk.LEFT)
self.calendar_label.pack()
# 上个月按钮
self.prev_month_button = tk.Button(self.root, text="上个月", command=self.prev_month)
self.prev_month_button.pack(pady=10)
# 下个月按钮
self.next_month_button = tk.Button(self.root, text="下个月", command=self.next_month)
self.next_month_button.pack()
# 事件文本框
self.event_entry = tk.Entry(self.root)
self.event_entry.pack(pady=10)
# 添加事件按钮
self.add_event_button = tk.Button(self.root, text="添加事件", command=self.add_event)
self.add_event_button.pack()
def show_current_month(self):
year = self.current_year.get()
month = self.current_month.get()
Calendar = calendar.monthcalendar(year, month)
# 构建日历字符串
calendar_str = ""
for week in Calendar:
for day in week:
if day == 0:
calendar_str += " "
else:
calendar_str += f"{day:2} "
calendar_str += "
"
self.calendar_label.config(text=calendar_str)
def prev_month(self):
if self.current_month.get() == 1:
self.current_month.set(12)
self.current_year.set(self.current_year.get() - 1)
else:
self.current_month.set(self.current_month.get() - 1)
self.show_current_month()
def next_month(self):
if self.current_month.get() == 12:
self.current_month.set(1)
self.current_year.set(self.current_year.get() + 1)
else:
self.current_month.set(self.current_month.get() + 1)
self.show_current_month()
def add_event(self):
event = self.event_entry.get().strip()
if event:
messagebox.showinfo("添加事件", f"成功添加事件:{event}")
else:
messagebox.showwarning("添加事件", "请输入事件内容!")
root = tk.Tk()
app = CalendarApp(root)
root.mainloop()
使用该日历应用的例子:
app = CalendarApp(tk.Tk()) app.current_year.set(2022) app.current_month.set(11) app.show_current_month() tk.mainloop()
这会打开一个日历应用的窗口,并且初始化为2022年11月的日历。
使用者可以选择年份和月份,查看不同的月份的日历。通过点击“上个月”和“下个月”按钮,可以查看前一个月和下一个月的日历。
用户还可以在输入框中输入事件内容,并点击“添加事件”按钮来添加事件。事件会在弹出消息框中显示。
