使用 Tkinter 的日历 tkCalendar
您需要做的第一件事是下载并安装 tkcalendar。这实际上并不是 Tkinter 库的一部分,而是我们需要获取的一个单独的包。
pip install tkcalendar
在命令提示符下运行上述命令(或其等效命令,具体取决于您的编码环境),现在您就可以开始在 Tkinter 中制作日历了。
让我们从一个非常基本的例子开始。
在这里,我们将日历类作为常规小部件导入,并将其传递到我们的窗口中。在学习本教程时,我们将更多地关注自定义它并与其交互。
1 2 3 4 5 6 7 8 9 | import tkinter as tkfrom tkcalendar import Calendarroot = tk.Tk()calendar = Calendar(root)calendar.pack()root.mainloop() |
这是我们的输出。

值得注意的是,日历上显示的默认日期是当天/月/年。在您自己运行此代码并检查默认日期之前,这对您来说并不明显。
您还可以通过更改年、月和日参数来控制默认日期,如下所示。
1 2 3 4 5 6 7 8 9 | import tkinter as tkfrom tkcalendar import Calendarroot = tk.Tk()calendar = Calendar(root, year=2023, month=4, day=4)calendar.pack()root.mainloop() |

如您所见,我们现在显示不同的日期作为默认日期。
自定义 Python tkCalendar
我们还可以指定允许用户从中进行选择的值的“范围”。这可以通过将日期时间对象(Python 标准库的一部分)传递到Calendar 类的mindate和参数中来完成。maxdate
1 2 3 4 5 6 7 8 9 10 11 12 13 | from datetime import datetimeimport tkinter as tkfrom tkcalendar import Calendarroot = tk.Tk()calendar = Calendar(root, mindate=datetime(2021, 1, 1), maxdate=datetime(2023, 12, 30), showweeknumbers=False, showothermonthdays=False)calendar.pack()root.mainloop() |
尝试运行此代码,您会发现无法选择 2021 年之前或 2023 年之后的日期。

我们还采用了更“简约”的方法,禁用了一些额外的细节,例如周数和下个月的日期。(将此输出与前一个输出进行比较)
让我们看一下本教程中的最后一件事。即如何交互并从日历中获取当前日期。
我们要做的是将一个调用的函数绑定updateLabel()到< 虚拟事件。每当我们在日历上选择日期时就会触发此事件。
在此函数中,我们将使用所选日期更新标签(我们也将创建该标签)。我们可以使用get_date()Calendar 对象上的函数获取当前日期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 号 18 19 | from datetime import datetimeimport tkinter as tkfrom tkcalendar import Calendardef updateLabel(event): label.config(text="Selected Date: " + calendar.get_date())root = tk.Tk()calendar = Calendar(root, mindate=datetime(2021, 1, 1), maxdate=datetime(2023, 12, 30), showweeknumbers=False, showothermonthdays=False)calendar.pack()calendar.bind('<, updateLabel)label = tk.Label(root, text="Selected Date: ")label.pack()root.mainloop() |

我们还可以使用按钮检索当前日期,而不是使用事件。
自定义 tkCalendar 的颜色
拥有一个与应用程序的颜色主题相匹配的漂亮日历也非常重要。您可以使用文档中提供的一些选项自定义 tkCalendar 小部件的颜色、文本和背景,如下所示。
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 | from datetime import datetimeimport tkinter as tkfrom tkcalendar import Calendardef updateLabel(event): label.config(text = "Selected Date: " + calendar.get_date())root = tk.Tk()calendar = Calendar(root, mindate = datetime(2020, 1, 1), maxdate = datetime(2023, 12, 30), showweeknumbers = False, showothermonthdays = False, background = "green", foreground = "white", selectbackground = "red", normalbackground = "lightgreen", weekendbackground = "darkgreen", weekendforeground = "white")calendar.pack()calendar.bind("<, updateLabel)label = tk.Label(root, text = "Selected Date: ")label.pack()root.mainloop() |

转自:https://coderslegacy.com/python/tkcalendar-date-picker-calendar/