Skip to content

Commit e490c00

Browse files
authored
gh-130482: Add ability to specify name for tkinter.OptionMenu and tkinter.ttk.OptionMenu (GH-130502)
1 parent 1e9cc3d commit e490c00

File tree

6 files changed

+19
-2
lines changed

6 files changed

+19
-2
lines changed

Doc/whatsnew/3.14.rst

+3
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,9 @@ tkinter
13721372
arguments passed by keyword.
13731373
(Contributed by Zhikang Yan in :gh:`126899`.)
13741374

1375+
* Add ability to specify name for :class:`!tkinter.OptionMenu` and
1376+
:class:`!tkinter.ttk.OptionMenu`.
1377+
(Contributed by Zhikang Yan in :gh:`130482`.)
13751378

13761379
turtle
13771380
------

Lib/test/test_tkinter/test_widgets.py

+5
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,11 @@ def test_bad_kwarg(self):
354354
with self.assertRaisesRegex(TclError, r"^unknown option -image$"):
355355
tkinter.OptionMenu(self.root, None, 'b', image='')
356356

357+
def test_specify_name(self):
358+
widget = tkinter.OptionMenu(self.root, None, ':)', name="option_menu")
359+
self.assertEqual(str(widget), ".option_menu")
360+
self.assertIs(self.root.children["option_menu"], widget)
361+
357362
@add_configure_tests(IntegerSizeTests, StandardOptionsTests)
358363
class EntryTest(AbstractWidgetTest, unittest.TestCase):
359364
_rounds_pixels = (tk_version < (9, 0))

Lib/test/test_ttk/test_extensions.py

+6
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ def cb_test(*args):
319319
textvar.trace_remove("write", cb_name)
320320
optmenu.destroy()
321321

322+
def test_specify_name(self):
323+
textvar = tkinter.StringVar(self.root)
324+
widget = ttk.OptionMenu(self.root, textvar, ":)", name="option_menu_ex")
325+
self.assertEqual(str(widget), ".option_menu_ex")
326+
self.assertIs(self.root.children["option_menu_ex"], widget)
327+
322328

323329
class DefaultRootTest(AbstractDefaultRootTest, unittest.TestCase):
324330

Lib/tkinter/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4199,7 +4199,7 @@ def __init__(self, master, variable, value, *values, **kwargs):
41994199
keyword argument command."""
42004200
kw = {"borderwidth": 2, "textvariable": variable,
42014201
"indicatoron": 1, "relief": RAISED, "anchor": "c",
4202-
"highlightthickness": 2}
4202+
"highlightthickness": 2, "name": kwargs.pop("name", None)}
42034203
Widget.__init__(self, master, "menubutton", kw)
42044204
self.widgetName = 'tk_optionMenu'
42054205
menu = self.__menu = Menu(self, name="menu", tearoff=0)

Lib/tkinter/ttk.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,8 @@ def __init__(self, master, variable, default=None, *values, **kwargs):
16031603
A callback that will be invoked after selecting an item.
16041604
"""
16051605
kw = {'textvariable': variable, 'style': kwargs.pop('style', None),
1606-
'direction': kwargs.pop('direction', None)}
1606+
'direction': kwargs.pop('direction', None),
1607+
'name': kwargs.pop('name', None)}
16071608
Menubutton.__init__(self, master, **kw)
16081609
self['menu'] = tkinter.Menu(self, tearoff=False)
16091610

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

0 commit comments

Comments
 (0)