]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-130482: Add ability to specify name for tkinter.OptionMenu and tkinter.ttk.OptionM...
authorZhikang Yan <2951256653@qq.com>
Fri, 2 May 2025 11:38:50 +0000 (19:38 +0800)
committerGitHub <noreply@github.com>
Fri, 2 May 2025 11:38:50 +0000 (14:38 +0300)
Doc/whatsnew/3.14.rst
Lib/test/test_tkinter/test_widgets.py
Lib/test/test_ttk/test_extensions.py
Lib/tkinter/__init__.py
Lib/tkinter/ttk.py
Misc/NEWS.d/next/Library/2025-02-24-12-22-51.gh-issue-130482.p2DrrL.rst [new file with mode: 0644]

index c0a824ee8ddf4dad95628a524bc6fbaf89437834..0d2e6533d05f8d501cbe0577239cb117b397e6dd 100644 (file)
@@ -1372,6 +1372,9 @@ tkinter
   arguments passed by keyword.
   (Contributed by Zhikang Yan in :gh:`126899`.)
 
+* Add ability to specify name for :class:`!tkinter.OptionMenu` and
+  :class:`!tkinter.ttk.OptionMenu`.
+  (Contributed by Zhikang Yan in :gh:`130482`.)
 
 turtle
 ------
index f6e77973061956aabd119ac71ab154feafb850d2..ff3f92e9b5ef831054ce96bee7d6f636c1666020 100644 (file)
@@ -354,6 +354,11 @@ class OptionMenuTest(MenubuttonTest, unittest.TestCase):
         with self.assertRaisesRegex(TclError, r"^unknown option -image$"):
             tkinter.OptionMenu(self.root, None, 'b', image='')
 
+    def test_specify_name(self):
+        widget = tkinter.OptionMenu(self.root, None, ':)', name="option_menu")
+        self.assertEqual(str(widget), ".option_menu")
+        self.assertIs(self.root.children["option_menu"], widget)
+
 @add_configure_tests(IntegerSizeTests, StandardOptionsTests)
 class EntryTest(AbstractWidgetTest, unittest.TestCase):
     _rounds_pixels = (tk_version < (9, 0))
index d5e069716971fe06d13e5915929c58d0799cb1b8..05bca59e703936c96417787f6ad65efc083ed950 100644 (file)
@@ -319,6 +319,12 @@ class OptionMenuTest(AbstractTkTest, unittest.TestCase):
         textvar.trace_remove("write", cb_name)
         optmenu.destroy()
 
+    def test_specify_name(self):
+        textvar = tkinter.StringVar(self.root)
+        widget = ttk.OptionMenu(self.root, textvar, ":)", name="option_menu_ex")
+        self.assertEqual(str(widget), ".option_menu_ex")
+        self.assertIs(self.root.children["option_menu_ex"], widget)
+
 
 class DefaultRootTest(AbstractDefaultRootTest, unittest.TestCase):
 
index 71a265e3532810edd6ea802d0d7412d016abc29f..a693b04870b99533f0ab472c97cdd8cd2068e57a 100644 (file)
@@ -4199,7 +4199,7 @@ class OptionMenu(Menubutton):
         keyword argument command."""
         kw = {"borderwidth": 2, "textvariable": variable,
               "indicatoron": 1, "relief": RAISED, "anchor": "c",
-              "highlightthickness": 2}
+              "highlightthickness": 2, "name": kwargs.pop("name", None)}
         Widget.__init__(self, master, "menubutton", kw)
         self.widgetName = 'tk_optionMenu'
         menu = self.__menu = Menu(self, name="menu", tearoff=0)
index 8ddb7f97e3b2334f7060992496f41de30dd03147..c0cf1e787fa9adf413b9e0ea36c127077b320542 100644 (file)
@@ -1603,7 +1603,8 @@ class OptionMenu(Menubutton):
                 A callback that will be invoked after selecting an item.
         """
         kw = {'textvariable': variable, 'style': kwargs.pop('style', None),
-              'direction': kwargs.pop('direction', None)}
+              'direction': kwargs.pop('direction', None),
+              'name': kwargs.pop('name', None)}
         Menubutton.__init__(self, master, **kw)
         self['menu'] = tkinter.Menu(self, tearoff=False)
 
diff --git a/Misc/NEWS.d/next/Library/2025-02-24-12-22-51.gh-issue-130482.p2DrrL.rst b/Misc/NEWS.d/next/Library/2025-02-24-12-22-51.gh-issue-130482.p2DrrL.rst
new file mode 100644 (file)
index 0000000..38a1e81
--- /dev/null
@@ -0,0 +1,2 @@
+Add ability to specify name for :class:`!tkinter.OptionMenu` and\r
+:class:`!tkinter.ttk.OptionMenu`.