From 168fc8adbc415f2070e7e779c0831c681b4efbe2 Mon Sep 17 00:00:00 2001 From: "Joe S. Boyle" Date: Fri, 27 Jan 2023 12:03:26 +0000 Subject: [PATCH 1/3] Refactor DynOptionMenu's initializer to no longer copy the kwargs dict --- Lib/idlelib/dynoption.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py index 9c6ffa435a1089..bc157237dc9387 100644 --- a/Lib/idlelib/dynoption.py +++ b/Lib/idlelib/dynoption.py @@ -2,8 +2,6 @@ OptionMenu widget modified to allow dynamic menu reconfiguration and setting of highlightthickness """ -import copy - from tkinter import OptionMenu, _setit, StringVar, Button class DynOptionMenu(OptionMenu): @@ -11,15 +9,11 @@ class DynOptionMenu(OptionMenu): unlike OptionMenu, our kwargs can include highlightthickness """ def __init__(self, master, variable, value, *values, **kwargs): - # TODO copy value instead of whole dict - kwargsCopy=copy.copy(kwargs) - if 'highlightthickness' in list(kwargs.keys()): - del(kwargs['highlightthickness']) + highlightthickness = kwargs.pop('highlightthickness', None) OptionMenu.__init__(self, master, variable, value, *values, **kwargs) - self.config(highlightthickness=kwargsCopy.get('highlightthickness')) - #self.menu=self['menu'] - self.variable=variable - self.command=kwargs.get('command') + self.config(highlightthickness=highlightthickness) + self.variable = variable + self.command = kwargs.get('command') def SetMenu(self,valueList,value=None): """ From 8416b770b10baffe77a074542055b2cd67980db9 Mon Sep 17 00:00:00 2001 From: JosephSBoyle <48555120+JosephSBoyle@users.noreply.github.com> Date: Fri, 27 Jan 2023 16:40:49 +0000 Subject: [PATCH 2/3] Update Lib/idlelib/dynoption.py Co-authored-by: Terry Jan Reedy --- Lib/idlelib/dynoption.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py index bc157237dc9387..f0086012cad49b 100644 --- a/Lib/idlelib/dynoption.py +++ b/Lib/idlelib/dynoption.py @@ -11,7 +11,7 @@ class DynOptionMenu(OptionMenu): def __init__(self, master, variable, value, *values, **kwargs): highlightthickness = kwargs.pop('highlightthickness', None) OptionMenu.__init__(self, master, variable, value, *values, **kwargs) - self.config(highlightthickness=highlightthickness) + self['highlightthickness'] = highlightthickness self.variable = variable self.command = kwargs.get('command') From 1f8c34671ade1b7c7d599fc524e427c4badd4272 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Mon, 27 Feb 2023 22:03:07 -0500 Subject: [PATCH 3/3] Improve htest. --- Lib/idlelib/dynoption.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py index f0086012cad49b..d5dfc3eda13f60 100644 --- a/Lib/idlelib/dynoption.py +++ b/Lib/idlelib/dynoption.py @@ -5,8 +5,9 @@ from tkinter import OptionMenu, _setit, StringVar, Button class DynOptionMenu(OptionMenu): - """ - unlike OptionMenu, our kwargs can include highlightthickness + """Add SetMenu and highlightthickness to OptionMenu. + + Highlightthickness adds space around menu button. """ def __init__(self, master, variable, value, *values, **kwargs): highlightthickness = kwargs.pop('highlightthickness', None) @@ -32,14 +33,15 @@ def _dyn_option_menu(parent): # htest # from tkinter import Toplevel # + StringVar, Button top = Toplevel(parent) - top.title("Tets dynamic option menu") + top.title("Test dynamic option menu") x, y = map(int, parent.geometry().split('+')[1:]) top.geometry("200x100+%d+%d" % (x + 250, y + 175)) top.focus_set() var = StringVar(top) var.set("Old option set") #Set the default value - dyn = DynOptionMenu(top,var, "old1","old2","old3","old4") + dyn = DynOptionMenu(top, var, "old1","old2","old3","old4", + highlightthickness=5) dyn.pack() def update(): @@ -48,5 +50,6 @@ def update(): button.pack() if __name__ == '__main__': + # Only module without unittests because of intention to replace. from idlelib.idle_test.htest import run run(_dyn_option_menu)