tkinter日历步伐的设计

耶耶耶耶耶  论坛元老 | 2025-3-26 18:21:24 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1645|帖子 1645|积分 4935


1. 步伐概述

这是一个使用 Python tkinter 库开发的图形界面日历步伐。它可以或许显示当前月份的日历,并允许用户通过按钮切换查看差别的月份。
2. 主要组件阐明

Calendar 类

这是步伐的主类,继承自 tkinter.Tk,作为整个应用的主窗口。
2.1 初始化方法 (init)

  1. def __init__(self):
  2.     super().__init__()
  3.     self.title("中国日历")
  4.     self.geometry("400x400")
复制代码


  • 设置窗口标题为"中国日历"
  • 设置窗口大小为 400x400 像素
  • 初始化当前日期信息(年份和月份)
2.2 创建界面元素 (create_widgets)

  1. def create_widgets(self):
复制代码
负责创建所有界面元素,包括:


  • 顶部导航栏:包罗上个月(<<)和下个月(>>)按钮
  • 年月显示标签:显示当前查看的年份和月份
  • 星期标题:显示"一"到"日"的星期标题
  • 日期网格:显示当月的所有日期
2.3 更新日历 (update_calendar)

  1. def update_calendar(self):
复制代码
这个方法负责:


  • 更新顶部的年月标题
  • 清除旧的日期按钮
  • 使用 calendar 模块获取当月日历数据
  • 创建新的日期按钮
  • 标记当前日期(用黄色配景高亮显示)
2.4 月份导航方法

  1. def prev_month(self):    # 切换到上一个月
  2. def next_month(self):    # 切换到下一个月
复制代码
这两个方法处置惩罚月份切换:


  • prev_month:月份减1,如果是1月则年份减1并设置月份为12
  • next_month:月份加1,如果是12月则年份加1并设置月份为1
3. 步伐运行流程

步伐启动代码:
  1. if __name__ == "__main__":
  2.     app = Calendar()
  3.     style = ttk.Style()
  4.     style.configure('Today.TButton', background='yellow')
  5.     app.mainloop()
复制代码


  • 创建日历应用实例
  • 设置当天日期的按钮样式(黄色配景)
  • 启动主循环
4. 特色功能


  • 直观的界面结构

    • 清晰的月份导航按钮
    • 网格化的日期显示
    • 中文星期标题

  • 当前日期高亮

    • 自动识别并高亮显示当天日期
    • 使用黄色配景突出显示

  • 月份导航

    • 可以无穷制地向前或向后浏览月份
    • 自动处置惩罚年份的变化

  • 自适应结构

    • 日期按钮会自动调解大小以适应窗口

5. 使用的主要模块



  • tkinter:Python 标准 GUI 库
  • ttk:提供主题化的 tkinter 部件
  • calendar:处置惩罚日历数据
  • datetime:处置惩罚日期和时间
6. 怎样使用


  • 运行步伐后,会显示当前月份的日历
  • 点击 “<<” 按钮查看上一个月
  • 点击 “>>” 按钮查看下一个月
  • 当天的日期会以黄色配景高亮显示
  • 窗口可以自由调解大小,日历结构会自动适应
7. 运行要求

依靠项



  • Python 3.x
  • tkinter (通常随Python一起安装)
运行方法

在下令行中执行:
  1. python main.py
复制代码
8. 代码

  1. import tkinter as tkfrom tkinter import ttkimport calendarfrom datetime import datetimeclass Calendar(tk.Tk):    def __init__(self):        super().__init__()                self.title("中国日历")        self.geometry("400x400")                self.current_date = datetime.now()        self.current_year = self.current_date.year        self.current_month = self.current_date.month                self.create_widgets()            def create_widgets(self):
  2.         # 创建顶部导航栏        nav_frame = ttk.Frame(self)        nav_frame.pack(pady=10)                ttk.Button(nav_frame, text="<<", command=self.prev_month).pack(side=tk.LEFT, padx=5)        self.header_label = ttk.Label(nav_frame, text="", font=('Arial', 12, 'bold'))        self.header_label.pack(side=tk.LEFT, padx=20)        ttk.Button(nav_frame, text=">>", command=self.next_month).pack(side=tk.LEFT, padx=5)                # 创建日历主体        self.cal_frame = ttk.Frame(self)        self.cal_frame.pack(expand=True, fill='both', padx=10, pady=10)                # 显示星期标题        weekdays = ["一", "二", "三", "四", "五", "六", "日"]        for i, day in enumerate(weekdays):            ttk.Label(self.cal_frame, text=day, font=('Arial', 10, 'bold')).grid(row=0, column=i, padx=5, pady=5)                    self.update_calendar()            def update_calendar(self):
  3.         # 更新标题        self.header_label.config(text=f"{self.current_year}年 {self.current_month}月")                # 清除旧的日期按钮        for widget in self.cal_frame.grid_slaves():            if int(widget.grid_info()["row"]) > 0:                widget.destroy()                        # 获取当月日历        cal = calendar.monthcalendar(self.current_year, self.current_month)                # 显示日期        for i, week in enumerate(cal):            for j, day in enumerate(week):                if day != 0:                    btn = ttk.Button(self.cal_frame, text=str(day))                    btn.grid(row=i+1, column=j, padx=2, pady=2, sticky='nsew')                                        # 标记本日的日期                    if (self.current_year == datetime.now().year and                         self.current_month == datetime.now().month and                         day == datetime.now().day):                        btn.config(style='Today.TButton')                                # 配置网格权重        for i in range(7):            self.cal_frame.grid_columnconfigure(i, weight=1)                def prev_month(self):        self.current_month -= 1        if self.current_month < 1:            self.current_month = 12            self.current_year -= 1        self.update_calendar()            def next_month(self):        self.current_month += 1        if self.current_month > 12:            self.current_month = 1            self.current_year += 1        self.update_calendar()if __name__ == "__main__":    app = Calendar()        # 创建自界说样式    style = ttk.Style()    style.configure('Today.TButton', background='yellow')        app.mainloop()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表