我们如何限制从 Python 中的 tkCalendar 日期条目选择器选择未来日期?

How can we restrict future date selection from tkCalender Date Entry picker in Python?

我正在 Python 使用 tkinter 创建图形用户应用程序。对于日期选择器,我为此使用了 tkCalendar 的日期条目。要求是限制用户选择未来的日期。在这种情况下我该如何实现?

Python 版本 3.7

tkCalendar 版本 1.3.1

您可以使用 DateEntry 中的 set_date 方法结合 root.after() 来控制用户输入。

import tkinter as tk
from tkcalendar import DateEntry
from datetime import datetime
from tkinter import messagebox

root = tk.Tk()
time_now = datetime.now()
calendar = DateEntry(root, width=12, background='darkblue',foreground='white', borderwidth=2)
calendar.pack()

def date_check():
    calendar_date = datetime.strptime(calendar.get(),"%m/%d/%y")
    if calendar_date > time_now:
        messagebox.showerror("Error", "Selected date must not exceed current date")
        calendar.set_date(time_now)
    root.after(100,date_check)

root.after(100,date_check)

root.mainloop()

对于 tkcalendar >= 1.5.0,现在可以使用 mindatemaxdate 选项来限制可用日期的范围。所以下面的代码阻止用户选择未来的日期:

from tkcalendar import DateEntry
from datetime import date
import tkinter as tk
today = date.today()
root = tk.Tk()
d = DateEntry(root, maxdate=today)
d.pack()
root.mainloop()