ttk: fix LabeledScale and OptionMenu destroy() method (#3026)
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.
diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py
index 1125439..77c93b1 100644
--- a/Lib/lib-tk/ttk.py
+++ b/Lib/lib-tk/ttk.py
@@ -1521,7 +1521,9 @@
pass
else:
del self._variable
- Frame.destroy(self)
+ Frame.destroy(self)
+ self.label = None
+ self.scale = None
def _adjust(self, *args):
@@ -1620,5 +1622,8 @@
def destroy(self):
"""Destroy this widget and its associated variable."""
- del self._variable
+ try:
+ del self._variable
+ except AttributeError:
+ pass
Menubutton.destroy(self)