IDLE: Simplify DynOptionsMenu __init__code (GH-101371)


Refactor DynOptionMenu's initializer to not copy  kwargs dict and use subscripting;
improve its htest.

(cherry picked from commit c41af812c948ec3cb07b2ef7a46a238f5cab3dc2)

Co-authored-by: JosephSBoyle <48555120+JosephSBoyle@users.noreply.github.com>
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py
index 9c6ffa4..d5dfc3e 100644
--- a/Lib/idlelib/dynoption.py
+++ b/Lib/idlelib/dynoption.py
@@ -2,24 +2,19 @@
 OptionMenu widget modified to allow dynamic menu reconfiguration
 and setting of highlightthickness
 """
-import copy
-
 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):
-        # 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['highlightthickness'] = highlightthickness
+        self.variable = variable
+        self.command = kwargs.get('command')
 
     def SetMenu(self,valueList,value=None):
         """
@@ -38,14 +33,15 @@
     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():
@@ -54,5 +50,6 @@
     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)