From 33460fa7e0bd126bee739a66e1228665dc22e70f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 9 Aug 2017 10:48:11 +0200 Subject: ttk: fix LabeledScale and OptionMenu destroy() method (#3025) (#3030) bpo-31135: Call the parent destroy() method even if the used attribute doesn't exist. The LabeledScale.destroy() method now also explicitly clears label and scale attributes to help the garbage collector to destroy all widgets. (cherry picked from commit cd7e9c1b67d3d07ee03e0a79af2791c19031cecb) --- Lib/tkinter/ttk.py | 12 ++++++++---- .../next/Library/2017-08-08-14-44-37.bpo-31135.HH94xR.rst | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-08-08-14-44-37.bpo-31135.HH94xR.rst diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 9cd0c20..2a3e1ce 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -1543,11 +1543,12 @@ class LabeledScale(Frame): try: self._variable.trace_vdelete('w', self.__tracecb) except AttributeError: - # widget has been destroyed already pass else: del self._variable - Frame.destroy(self) + super().destroy() + self.label = None + self.scale = None def _adjust(self, *args): @@ -1647,5 +1648,8 @@ class OptionMenu(Menubutton): def destroy(self): """Destroy this widget and its associated variable.""" - del self._variable - Menubutton.destroy(self) + try: + del self._variable + except AttributeError: + pass + super().destroy() diff --git a/Misc/NEWS.d/next/Library/2017-08-08-14-44-37.bpo-31135.HH94xR.rst b/Misc/NEWS.d/next/Library/2017-08-08-14-44-37.bpo-31135.HH94xR.rst new file mode 100644 index 0000000..60068fb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-08-08-14-44-37.bpo-31135.HH94xR.rst @@ -0,0 +1,4 @@ +ttk: fix the destroy() method of LabeledScale and OptionMenu classes. +Call the parent destroy() method even if the used attribute doesn't +exist. The LabeledScale.destroy() method now also explicitly clears label and +scale attributes to help the garbage collector to destroy all widgets. -- cgit v0.12