j4321 / tkcalendar

Calendar widget for Tkinter
https://pypi.python.org/pypi/tkcalendar
GNU General Public License v3.0
97 stars 33 forks source link

Exception generated after calevent_remove #83

Closed LaurentBerger closed 9 months ago

LaurentBerger commented 2 years ago

platform windows 10 Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32 tkcalendar 1.6.1

My program is

import tkinter
import datetime
import tkcalendar

def changement_date(event, l_date):
    date_choisie = event.widget.get_date()
    date_python = datetime.datetime.strptime(date_choisie,"%d/%m/%Y")
    if date_python not in l_date[0]:
        evt_id = event.widget.calevent_create(date_python, "")
        l_date[0].append(date_python)      
        l_date[1].append(evt_id)      
        print(l_date)
    else:
        pos = l_date[0].index(date_python)
        id = l_date[1][pos]
        l_date[0].remove(date_python)
        l_date[1].remove(id)
        event.widget.calevent_remove(id)
        print(l_date)

if __name__ == '__main__':
    fen_principale = tkinter.Tk(className="Usage tkcalendar")
    liste_dates_id = [[],[]]
    calendrier = tkcalendar.Calendar(fen_principale,
                                        width=12,
                                        background='darkblue',
                                        foreground='white',
                                        borderwidth=2,
                                        year=2022,
                                        locale='fr_FR')
    calendrier.bind("<<CalendarSelected>>",
                     lambda event: changement_date(event, liste_dates_id))
    calendrier.pack()
    fen_principale.mainloop()
    for date_selec in liste_dates_id :
        print(date_selec)

I run programm and I select three date in calendar : image Now I click in mer 9 blue vanish (that's ok) image

but I have got an exception in console

[[datetime.datetime(2022, 2, 8, 0, 0)], [0]]
[[datetime.datetime(2022, 2, 8, 0, 0), datetime.datetime(2022, 2, 9, 0, 0)], [0, 1]]
[[datetime.datetime(2022, 2, 8, 0, 0), datetime.datetime(2022, 2, 9, 0, 0), datetime.datetime(2022, 2, 10, 0, 0)], [0, 1, 2]]
[[datetime.datetime(2022, 2, 8, 0, 0), datetime.datetime(2022, 2, 10, 0, 0)], [0, 2]]
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\tkinter\__init__.py", line 814, in callit
    func(*args)
  File "C:\Users\Laurent\AppData\Roaming\Python\Python39\site-packages\tkcalendar\tooltip.py", line 221, in display_tooltip
    self.tooltip['text'] = self.widgets[str(self.current_widget)]
KeyError: '.!calendar.!frame2.!label20'

What's wrong in my program?