python写一个日历_在pythontkin中为事件创建一个日历视图

这篇博客介绍了如何利用Python的calendar模块和Tkinter库来构建一个日历视图。通过示例代码,展示了如何展示特定年月的日历,并用Button小部件表示日期,其中非当前月份的日期背景设为灰色,最后一天的日期文字颜色设为红色。虽然没有直接展示事件,但提出了在日历上添加事件和按钮功能的潜在实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tkinter的小部件也使用calendar

(但是,如果您只需要将事件显示为列表,那么您只需要Label/Button和{}或{}。这一点你可以在任何教程中找到。)

Python具有模块calendar,该模块可以将日历生成为文本或HTMLimport calendar

text = calendar.TextCalendar()

print(text.formatmonth(2017, 12))

结果:

^{pr2}$

或者全年print(text.formatyear(2017))

结果:2017

January February March

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 1 2 3 4 5 1 2 3 4 5

2 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 10 11 12

9 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 17 18 19

16 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 26

23 24 25 26 27 28 29 27 28 27 28 29 30 31

30 31

April May June

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 2 1 2 3 4 5 6 7 1 2 3 4

3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11

10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18

17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25

24 25 26 27 28 29 30 29 30 31 26 27 28 29 30

July August September

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 2 1 2 3 4 5 6 1 2 3

3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10

10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17

17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24

24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30

31

October November December

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 1 2 3 4 5 1 2 3

2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10

9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17

16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24

23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31

30 31

它还可以为所选月份提供日期时间对象print(text.monthdatescalendar(2017, 12))

结果[[datetime.date(2017, 11, 27), datetime.date(2017, 11, 28), datetime.date(2017, 11, 29), datetime.date(2017, 11, 30), datetime.date(2017, 12, 1), datetime.date(2017, 12, 2), datetime.date(2017, 12, 3)],

[datetime.date(2017, 12, 4), datetime.date(2017, 12, 5), datetime.date(2017, 12, 6), datetime.date(2017, 12, 7), datetime.date(2017, 12, 8), datetime.date(2017, 12, 9), datetime.date(2017, 12, 10)],

[datetime.date(2017, 12, 11), datetime.date(2017, 12, 12), datetime.date(2017, 12, 13), datetime.date(2017, 12, 14), datetime.date(2017, 12, 15), datetime.date(2017, 12, 16), datetime.date(2017, 12, 17)],

[datetime.date(2017, 12, 18), datetime.date(2017, 12, 19), datetime.date(2017, 12, 20), datetime.date(2017, 12, 21), datetime.date(2017, 12, 22), datetime.date(2017, 12, 23), datetime.date(2017, 12, 24)],

[datetime.date(2017, 12, 25), datetime.date(2017, 12, 26), datetime.date(2017, 12, 27), datetime.date(2017, 12, 28), datetime.date(2017, 12, 29), datetime.date(2017, 12, 30), datetime.date(2017, 12, 31)]]

您可以使用Calendar创建生成{}的类,如下所示:

# - class -

import calendar

import tkinter

class TkinterCalendar(calendar.Calendar):

def formatmonth(self, master, year, month):

dates = self.monthdatescalendar(year, month)

frame = tkinter.Frame(master)

self.labels = []

for r, week in enumerate(dates):

labels_row = []

for c, date in enumerate(week):

label = tkinter.Button(frame, text=date.strftime('%Y\n%m\n%d'))

label.grid(row=r, column=c)

if date.month != month:

label['bg'] = '#aaa'

if c == 6:

label['fg'] = 'red'

labels_row.append(label)

self.labels.append(labels_row)

return frame

# - example how to use -

import tkinter as tk

root = tk.Tk()

tkcalendar = TkinterCalendar()

for year, month in [(2017, 11), (2017, 12), (2018,1)]:

tk.Label(root, text = '{} / {}'.format(year, month)).pack()

frame = tkcalendar.formatmonth(root, year, month)

frame.pack()

root.mainloop()

它仍然需要在日历中显示事件并将功能分配给按钮(每个日期都是tkinter.Button)。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值