From 3c0fc7bcf7fe27f1eb574d4f33b8454fdac12b8e Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 23 Jul 2020 14:01:02 +0300 Subject: [PATCH 1/4] fix .keys()[0] in tkinter --- Lib/tkinter/__init__.py | 2 +- Lib/tkinter/test/test_tkinter/test_widgets.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index a3378d012fb41a..d97d730e61a8b5 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -3965,7 +3965,7 @@ def __init__(self, master, variable, value, *values, **kwargs): if 'command' in kwargs: del kwargs['command'] if kwargs: - raise TclError('unknown option -'+kwargs.keys()[0]) + raise TclError('unknown option -'+next(iter(kwargs.keys()))) menu.add_command(label=value, command=_setit(variable, value, callback)) for v in values: diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py index 16e9d93944c205..d810abe3bb2621 100644 --- a/Lib/tkinter/test/test_tkinter/test_widgets.py +++ b/Lib/tkinter/test/test_tkinter/test_widgets.py @@ -307,6 +307,10 @@ class OptionMenuTest(MenubuttonTest, unittest.TestCase): def create(self, default='b', values=('a', 'b', 'c'), **kwargs): return tkinter.OptionMenu(self.root, None, default, *values, **kwargs) + def test_bad_kwarg(self): + with self.assertRaisesRegex(TclError, r"^unknown option -image$"): + tkinter.OptionMenu(self.root, None, 'b', 'a', 'b', 'c', image='::tk::icons::question') + @add_standard_options(IntegerSizeTests, StandardOptionsTests) class EntryTest(AbstractWidgetTest, unittest.TestCase): From b24f881f63bdd5e1906b853ecff17338dc48d420 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Jul 2020 19:12:13 +0300 Subject: [PATCH 2/4] delete unnecessary .keys() Co-authored-by: Serhiy Storchaka --- Lib/tkinter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index d97d730e61a8b5..1067ab6a8b8a1d 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -3965,7 +3965,7 @@ def __init__(self, master, variable, value, *values, **kwargs): if 'command' in kwargs: del kwargs['command'] if kwargs: - raise TclError('unknown option -'+next(iter(kwargs.keys()))) + raise TclError('unknown option -'+next(iter(kwargs))) menu.add_command(label=value, command=_setit(variable, value, callback)) for v in values: From 038919a316a0a311896e8e1664fa0309f212a32d Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 25 Jul 2020 14:22:35 +0300 Subject: [PATCH 3/4] delete unnecessary values of OptionMenu Co-authored-by: Terry Jan Reedy --- Lib/tkinter/test/test_tkinter/test_widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py index d810abe3bb2621..721e81369a8d5b 100644 --- a/Lib/tkinter/test/test_tkinter/test_widgets.py +++ b/Lib/tkinter/test/test_tkinter/test_widgets.py @@ -309,7 +309,7 @@ def create(self, default='b', values=('a', 'b', 'c'), **kwargs): def test_bad_kwarg(self): with self.assertRaisesRegex(TclError, r"^unknown option -image$"): - tkinter.OptionMenu(self.root, None, 'b', 'a', 'b', 'c', image='::tk::icons::question') + tkinter.OptionMenu(self.root, None, 'b', image='') @add_standard_options(IntegerSizeTests, StandardOptionsTests) From fcae5dec1b2ad45d96ca342037d71abb8abe7cc1 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sun, 26 Jul 2020 21:19:40 -0400 Subject: [PATCH 4/4] blurb --- .../next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst diff --git a/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst b/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst new file mode 100644 index 00000000000000..d797374a09e6f6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst @@ -0,0 +1,2 @@ +Raise TclError instead of TypeError when an unknown option is passed to +tkinter.OptionMenu.