在python tkinter中为事件创建日历视图[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python tkinter中为事件创建日历视图[关闭]相关的知识,希望对你有一定的参考价值。
所以我要做的就是制作一个日历框架,就像谷歌日历或任何其他日历程序的视图一样,在那里我可以选择一天,看看我当天要做的事情,是时候使用了python tkinter。目前在我的数据库中,我有日期,开始时间和结束时间的事件。请注意,我正在使用python 3.任何人都可以给我一个线索,如何做到这一点,甚至发送一个链接到一个网站说它如何做到这一点。但是请,我不是在寻找一个日期选择器,只是一个日历,告诉我什么时候应该做什么。谢谢 ;)
编辑:我发现在SO:How do I create a date picker in tkinter?。
还有tkinter
的小工具,它们也使用calendar
(但是如果你只需要将事件显示为列表,那么你只需要Label
/ Button
和pack()
或Listbox
。这可以在任何教程中找到。)
Python
有模块calendar,它可以生成日历作为文本或HTML
import calendar
text = calendar.TextCalendar()
print(text.formatmonth(2017, 12))
结果:
December 2017
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
或者全年
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
来创建生成tkinter.Frame
的类,如下所示:
# --- 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
%m
%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
)。
以上是关于在python tkinter中为事件创建日历视图[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
php 事件日历PRO:在单一地点的列表视图中为每个事件添加JSON-LD标记。
❤️python入门项目使用 Tkinter 的 日历 GUI 应用程序❤️
❤️python入门项目使用 Tkinter 的 日历 GUI 应用程序❤️