You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySimpleGUI日历组件中添加并显示事件?

在PySimpleGUI日历中显示事件的实现思路

1. 先搞定事件数据的存储

用一个字典关联日期和事件,key统一用%Y-%m-%d格式的字符串,value是该日期对应的事件列表,示例:

events = {
    "2024-05-20": ["约会", "买礼物"],
    "2024-05-21": ["提交项目报告"]
}

这种结构方便快速查找某一天的事件,添加新事件时也能直接更新字典。

2. 自定义日历单元格渲染(核心)

PySimpleGUI的Calendar组件是封装了tkcalendar库的控件,你可以通过window['-CALENDAR-'].Widget拿到底层的tkcalendar对象,然后修改它的单元格显示逻辑:

  • 继承tkcalendar.Calendar类,重写_day_cell方法,绘制日期后把事件缩写、小圆点这类标记加到单元格里
  • 或者直接给现有日历对象绑定<<CalendarMonthChanged>>事件,切换月份时给有事件的日期加背景色、小图标高亮

简单的高亮示例:

import tkcalendar
import PySimpleGUI as sg
from datetime import datetime

events = {"2024-05-20": ["约会", "买礼物"]}

# 创建窗口
layout = [[sg.Calendar(key='-CALENDAR-', format='%Y-%m-%d')]]
window = sg.Window('带事件的日历', layout)
cal = window['-CALENDAR-'].Widget

# 给有事件的日期加背景色
def highlight_dates(event):
    # 清除旧高亮
    for date in cal.calevent_dates:
        cal.calevent_remove(date)
    # 添加新高亮
    for date_str in events.keys():
        date = datetime.strptime(date_str, "%Y-%m-%d").date()
        cal.calevent_create(date, '', 'event_tag')
    cal.tag_config('event_tag', background='lightblue')

cal.bind('<<CalendarMonthChanged>>', highlight_dates)
highlight_dates(None)  # 初始化时就高亮

3. 绑定日期点击显示事件详情

给日历绑定点击事件,用户点选日期时直接展示当天的所有事件:

  • 窗口布局里加一个Multiline或Listbox组件用来显示事件
  • 给日历绑定<Button-1>事件,回调中获取选中日期,从字典里取出对应事件更新显示

示例:

# 更新布局
layout = [
    [sg.Calendar(key='-CALENDAR-', format='%Y-%m-%d')],
    [sg.Text('当日事件:'), sg.Multiline(size=(40,8), key='-EVENT_BOX-', disabled=True)]
]
window = sg.Window('带事件的日历', layout)
cal = window['-CALENDAR-'].Widget

def show_day_events(event):
    selected_date = cal.get_date()
    day_events = events.get(selected_date, ['无事件'])
    window['-EVENT_BOX-'].update('\n'.join(day_events))

cal.bind('<Button-1>', show_day_events)

4. 添加事件后实时更新

在添加事件的窗口保存事件后,同步更新全局的events字典,然后调用高亮函数刷新日历显示,同时更新当前选中日期的事件列表,确保界面和数据一致。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:06:21