https://github.com/python/cpython/commit/e490c00dac16d458bb66ad157fda2edd0a2d0a14
commit: e490c00dac16d458bb66ad157fda2edd0a2d0a14
branch: main
author: Zhikang Yan <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2025-05-02T14:38:50+03:00
summary:
gh-130482: Add ability to specify name for tkinter.OptionMenu and
tkinter.ttk.OptionMenu (GH-130502)
files:
A Misc/NEWS.d/next/Library/2025-02-24-12-22-51.gh-issue-130482.p2DrrL.rst
M Doc/whatsnew/3.14.rst
M Lib/test/test_tkinter/test_widgets.py
M Lib/test/test_ttk/test_extensions.py
M Lib/tkinter/__init__.py
M Lib/tkinter/ttk.py
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index c0a824ee8ddf4d..0d2e6533d05f8d 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -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
------
diff --git a/Lib/test/test_tkinter/test_widgets.py
b/Lib/test/test_tkinter/test_widgets.py
index f6e77973061956..ff3f92e9b5ef83 100644
--- a/Lib/test/test_tkinter/test_widgets.py
+++ b/Lib/test/test_tkinter/test_widgets.py
@@ -354,6 +354,11 @@ def test_bad_kwarg(self):
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))
diff --git a/Lib/test/test_ttk/test_extensions.py
b/Lib/test/test_ttk/test_extensions.py
index d5e069716971fe..05bca59e703936 100644
--- a/Lib/test/test_ttk/test_extensions.py
+++ b/Lib/test/test_ttk/test_extensions.py
@@ -319,6 +319,12 @@ def cb_test(*args):
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):
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 71a265e3532810..a693b04870b995 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -4199,7 +4199,7 @@ def __init__(self, master, variable, value, *values,
**kwargs):
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)
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py
index 8ddb7f97e3b233..c0cf1e787fa9ad 100644
--- a/Lib/tkinter/ttk.py
+++ b/Lib/tkinter/ttk.py
@@ -1603,7 +1603,8 @@ def __init__(self, master, variable, default=None,
*values, **kwargs):
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
index 00000000000000..38a1e81770fbf3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-02-24-12-22-51.gh-issue-130482.p2DrrL.rst
@@ -0,0 +1,2 @@
+Add ability to specify name for :class:`!tkinter.OptionMenu` and
+:class:`!tkinter.ttk.OptionMenu`.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]