gh-130482: Add ability to specify name for tkinter.OptionMenu and tkinter.ttk.OptionMenu (GH-130502)

This commit is contained in:
Zhikang Yan 2025-05-02 19:38:50 +08:00 committed by GitHub
parent 1e9cc3d502
commit e490c00dac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 19 additions and 2 deletions

View 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
------

View 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))

View 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):

View 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)

View 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)

View File

@ -0,0 +1,2 @@
Add ability to specify name for :class:`!tkinter.OptionMenu` and
:class:`!tkinter.ttk.OptionMenu`.