I would not catalogue this as a bug, but more as “unintended behavior”. First, let me put you into context:
Let’s say, I want to create a matplotlib chart, embedded in a tkinter window. Therefore, I will be using tools like FigureCanvasTkAgg and NavigationToolbar2Tk.
Then, I want to edit the NavigationToolbar2Tk. I will remove buttons this way:
self.toolbar.children['!button4'].pack_forget()
self.toolbar.children['!checkbutton1'].pack_forget()
self.toolbar.children['!frame'].pack_forget()
self.toolbar.children['!frame2'].pack_forget()
Then, I will create some Buttons and Checkbuttons, and add them by packing. I will also use the method self.toolbar._Spacer()
to add some Spacers.
All of these WORKS fine. The problem is: let’s now do the following. All the chart is being created in a custom class object (that’s why you see me using self). Now, I will delete the class, and start the process again. When running line self.toolbar.children['!checkbutton1'].pack_forget()
, I will get an error. That one is the only pack_forget()
triggering it. The reason is, the new toolbar has the same children as before when initialised, except for checkbuttons - their numbers will change, but why?
Consider that “delete the class” does not involve stopping the code. I have a Tk() window with a button, and matplotlib plots in a Toplevel() window. I close the Toplevel window, and press a button in my Tk() to create the new Toplevel and custom class with my matplotlib stuff.
I’ll give you a photo of two prints. They are printing all keys of self.toolbar.children, for the first try (no errors) and the second (triggers error)