Как получить выбранную дату для DateEntry в tkcalendar (Python)? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 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()

1 Ответ

0 голосов
/ 31 мая 2018

Вы упоминаете, что пытались 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()

Если вы хотите получать дату каждый раз, когда она меняется, выможно использовать привязку события.Начиная с документация :

  • Виртуальные события

Событие <<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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...