【问题标题】:How can we restrict future date selection from tkCalender Date Entry picker in Python?我们如何从 Python 中的 tkCalendar 日期条目选择器中限制未来的日期选择?
【发布时间】:2018-12-28 14:08:55
【问题描述】:

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

Python 3.7 版

tkCalendar 版本 1.3.1

【问题讨论】:

  • 你给潜在的回答者带来了负担,发布代码以获得帮助。

标签: python-3.x tkinter tkcalendar


【解决方案1】:

对于 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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这不是一个理想的解决方案!!最好的解决方案是监听小部件本身的变化。更新!!!:对于较新的版本,您可以使用 mindate 和 maxdate 限制范围
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 2014-08-18
    • 2015-06-03
    • 2023-02-07
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多