【问题标题】:How to get the selected date for DateEntry in tkcalendar (Python)?如何在 tkcalendar (Python) 中获取 DateEntry 的选定日期?
【发布时间】:2018-05-31 13:45:04
【问题描述】:

我有一个 tkcalendar,它是日历、DateEntry 的预定义小部件,我正在尝试获取 用户为 DateEntry 选择的日期。 虽然可以使用 "selection_get()" 提取日历小部件的选定日期,但我找不到 DateEntry 的任何日期。

我已经尝试过 get_date()、get()、_date()、cget()、._selection() 等等,但它们似乎没有返回/打印用户选择的日期。 请帮忙,如果需要任何补充信息,请告诉我

代码[摘自一个简单的 tkcalendar 教程]:

import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar, DateEntry

def calendar_view():
    def print_sel():
        print(cal.selection_get())

    top = tk.Toplevel(root)

    cal = Calendar(top,
                   font="Arial 14", selectmode='day',
                   cursor="hand1", year=2018, month=2, day=5)
    cal.pack(fill="both", expand=True)
    ttk.Button(top, text="ok", command=print_sel).pack()

def dateentry_view():
    top = tk.Toplevel(root)

    ttk.Label(top, text='Choose date').pack(padx=10, pady=10)
    cal = DateEntry(top, width=12, background='darkblue',
                    foreground='white', borderwidth=2)
    cal.pack(padx=10, pady=10)
    print(cal.cget(DateEntry))

root = tk.Tk()
s = ttk.Style(root)
s.theme_use('clam')

ttk.Button(root, text='Calendar', command=calendar_view()).pack(padx=10, pady=10)
ttk.Button(root, text='DateEntry', command=dateentry_view()).pack(padx=10, pady=10)

root.mainloop()

【问题讨论】:

    标签: python python-3.x tkinter tkcalendar


    【解决方案1】:

    您提到您尝试过get_date(),但没有成功,但这实际上是正确的功能。

    import tkinter as tk
    from tkinter import ttk
    from tkcalendar import Calendar, DateEntry
    
    def calendar_view():
        def print_sel():
            print(cal.selection_get())
    
        top = tk.Toplevel(root)
    
        cal = Calendar(top,
                       font="Arial 14", selectmode='day',
                       cursor="hand1", year=2018, month=2, day=5)
        cal.pack(fill="both", expand=True)
        ttk.Button(top, text="ok", command=print_sel).pack()
    
    def dateentry_view():
        def print_sel():
            print(cal.get_date())
        top = tk.Toplevel(root)
    
        ttk.Label(top, text='Choose date').pack(padx=10, pady=10)
        cal = DateEntry(top, width=12, background='darkblue',
                        foreground='white', borderwidth=2)
        cal.pack(padx=10, pady=10)
        ttk.Button(top, text="ok", command=print_sel).pack()
    
    root = tk.Tk()
    s = ttk.Style(root)
    s.theme_use('clam')
    
    ttk.Button(root, text='Calendar', command=calendar_view).pack(padx=10, pady=10)
    ttk.Button(root, text='DateEntry', command=dateentry_view).pack(padx=10, pady=10)
    
    root.mainloop()
    

    如果您想在每次更改时获取日期,您可以使用事件绑定。来自the documentation

    • 虚拟事件

    每次用户用鼠标选择一天时,都会生成一个<<CalendarSelected>> 事件。

    因此您可以将获取日期的函数绑定到<<CalendarSelected>> 事件:

    def dateentry_view():
        def print_sel(e):
            print(cal.get_date())
        top = tk.Toplevel(root)
    
        ttk.Label(top, text='Choose date').pack(padx=10, pady=10)
        cal = DateEntry(top, width=12, background='darkblue',
                        foreground='white', borderwidth=2)
        cal.pack(padx=10, pady=10)
        cal.bind("<<DateEntrySelected>>", print_sel)
    

    【讨论】:

    • 我试图使用 cal.get_date() 但在 cal.pack(...) 命令之后打印日期,因为我希望能够在用户选择日期后立即正在选择它。关于为什么不通过按钮传递它就不会发生的任何想法?
    • 这个链接实际上是我从中获得基本代码的地方 - 虽然错过了事件绑定点。希望我能在 15 分钟内回复 + 解决方案为您加倍投票。谢谢你! :)
    • @GarimaTiwari 我为你做了双重:)
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多