@Ledauph1
Я только учусь, не пинайте строго.

Как задать динамически меняющийся диапазон дат в tkcalendar?

Имеется два DateEntry. Необходимо при виборе даты в DateEntry_1, изменить mindate(минмально допустимую дату) в DateEntry_2. Желательно без использования дополнительных виджетов типа кнопок.
Пример: в DateEntry_1 выбрана дата - 10/12/2021, в DateEntry_2 доступна дата - 10/12/2021 и дальше.
Для получения выбранной даты в DateEntry_1 использую привязку к событию(bind):
spoiler
def get_data_now(self):
        def print_sel(e):
            print(self.cal.get_date())
            return self.cal.get_date()
        self.cal.bind("<<DateEntrySelected>>", print_sel)


код
import tkinter as tk
from tkinter import ttk
import datetime
from tkcalendar import Calendar, DateEntry



class Date_Picker:
    def __init__(self, master):
        self.root = master
        self.label = ttk.Label(self.root, text='Select date').pack(side='left')
        self.cal = DateEntry(self.root, width=12, background='darkblue',
                        foreground='white', borderwidth=2, date_pattern='dd/mm/YYYY')
        self.cal.pack(side='left')
    def get_data_now(self):
        def print_sel(e):
            print(self.cal.get_date())
            return self.cal.get_date()
        self.cal.bind("<<DateEntrySelected>>", print_sel)
    def show(self):
        print('Выбраная дата: ', self.cal.get())
        return self.cal.get()

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


root.mainloop()
  • Вопрос задан
  • 417 просмотров
Решения вопроса 1
@EgorSvinarev
Здравствуйте. Вы можете при инициализации DateEntry указать параметр textvariable, и добавить обработчик для события изменения этой переменной. Затем в обработчике через
метод set_date менять дату.
from tkinter import *
from tkcalendar import DateEntry

root = Tk()

def handler(*args):
	# set data in datetime.date format



variable = StringVar()

entry_1 = DateEntry(root, date_pattern='dd/mm/YYYY', textvariable = variable)
entry_2 = DateEntry(root, date_pattern='dd/mm/YYYY')

variable.trace_add("write", handler)

entry_1.pack()
entry_2.pack()


root.mainloop()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы