使用 Tkinter 的日历 tkCalendar
您需要做的第一件事是下载并安装 tkcalendar。这实际上并不是 Tkinter 库的一部分,而是我们需要获取的一个单独的包。
pip install tkcalendar
在命令提示符下运行上述命令(或其等效命令,具体取决于您的编码环境),现在您就可以开始在 Tkinter 中制作日历了。
让我们从一个非常基本的例子开始。
在这里,我们将日历类作为常规小部件导入,并将其传递到我们的窗口中。在学习本教程时,我们将更多地关注自定义它并与其交互。
1 2 3 4 5 6 7 8 9 | import tkinter as tk from tkcalendar import Calendar root = tk.Tk() calendar = Calendar(root) calendar.pack() root.mainloop() |
这是我们的输出。
值得注意的是,日历上显示的默认日期是当天/月/年。在您自己运行此代码并检查默认日期之前,这对您来说并不明显。
您还可以通过更改年、月和日参数来控制默认日期,如下所示。
1 2 3 4 5 6 7 8 9 | import tkinter as tk from tkcalendar import Calendar root = 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 datetime import tkinter as tk from tkcalendar import Calendar root = 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 datetime import tkinter as tk from tkcalendar import Calendar def 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 datetime import tkinter as tk from tkcalendar import Calendar def 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/