Python tkCalendar – 创建日期选择器日历
作者
log
时间
2023-10-19

使用 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()

Python tkCalendar

我们还可以使用按钮检索当前日期,而不是使用事件。


自定义 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()

Python tkCalendar


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