欢迎访问宙启技术站
智能推送

用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月的日历。

使用者可以选择年份和月份,查看不同的月份的日历。通过点击“上个月”和“下个月”按钮,可以查看前一个月和下一个月的日历。

用户还可以在输入框中输入事件内容,并点击“添加事件”按钮来添加事件。事件会在弹出消息框中显示。