[Python-checkins] [3.12] gh-100814: Fix exception for invalid callable value of Tkinter image option (GH-107692) (#107722)
Yhg1s
webhook-mailer at python.org
Wed Aug 16 08:30:34 EDT 2023
https://github.com/python/cpython/commit/6fd572f3b3dcc00cd80ba8e9a5a7c3a9cefc60cb
commit: 6fd572f3b3dcc00cd80ba8e9a5a7c3a9cefc60cb
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Yhg1s <thomas at python.org>
date: 2023-08-16T14:30:31+02:00
summary:
[3.12] gh-100814: Fix exception for invalid callable value of Tkinter image option (GH-107692) (#107722)
gh-100814: Fix exception for invalid callable value of Tkinter image option (GH-107692)
Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
(cherry picked from commit 50e3cc9748eb2103eb7ed6cc5a74d177df3cfb13)
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
files:
A Misc/NEWS.d/next/Library/2023-08-06-15-29-00.gh-issue-100814.h195gW.rst
M Lib/test/test_tkinter/test_images.py
M Lib/tkinter/__init__.py
diff --git a/Lib/test/test_tkinter/test_images.py b/Lib/test/test_tkinter/test_images.py
index b6f8b79ae689f..94cfe7df0be26 100644
--- a/Lib/test/test_tkinter/test_images.py
+++ b/Lib/test/test_tkinter/test_images.py
@@ -144,6 +144,14 @@ def test_configure_foreground(self):
self.assertEqual(image['foreground'],
'-foreground {} {} #000000 yellow')
+ def test_bug_100814(self):
+ # gh-100814: Passing a callable option value causes AttributeError.
+ with self.assertRaises(tkinter.TclError):
+ tkinter.BitmapImage('::img::test', master=self.root, spam=print)
+ image = tkinter.BitmapImage('::img::test', master=self.root)
+ with self.assertRaises(tkinter.TclError):
+ image.configure(spam=print)
+
class PhotoImageTest(AbstractTkTest, unittest.TestCase):
@@ -274,6 +282,14 @@ def test_configure_palette(self):
image.configure(palette='3/4/2')
self.assertEqual(image['palette'], '3/4/2')
+ def test_bug_100814(self):
+ # gh-100814: Passing a callable option value causes AttributeError.
+ with self.assertRaises(tkinter.TclError):
+ tkinter.PhotoImage('::img::test', master=self.root, spam=print)
+ image = tkinter.PhotoImage('::img::test', master=self.root)
+ with self.assertRaises(tkinter.TclError):
+ image.configure(spam=print)
+
def test_blank(self):
image = self.create()
image.blank()
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index c675c511e0453..c59f8d11e8a9d 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -4069,8 +4069,6 @@ def __init__(self, imgtype, name=None, cnf={}, master=None, **kw):
elif kw: cnf = kw
options = ()
for k, v in cnf.items():
- if callable(v):
- v = self._register(v)
options = options + ('-'+k, v)
self.tk.call(('image', 'create', imgtype, name,) + options)
self.name = name
@@ -4097,8 +4095,6 @@ def configure(self, **kw):
for k, v in _cnfmerge(kw).items():
if v is not None:
if k[-1] == '_': k = k[:-1]
- if callable(v):
- v = self._register(v)
res = res + ('-'+k, v)
self.tk.call((self.name, 'config') + res)
diff --git a/Misc/NEWS.d/next/Library/2023-08-06-15-29-00.gh-issue-100814.h195gW.rst b/Misc/NEWS.d/next/Library/2023-08-06-15-29-00.gh-issue-100814.h195gW.rst
new file mode 100644
index 0000000000000..86cb7bf79f307
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-08-06-15-29-00.gh-issue-100814.h195gW.rst
@@ -0,0 +1,2 @@
+Passing a callable object as an option value to a Tkinter image now raises
+the expected TclError instead of an AttributeError.
More information about the Python-checkins
mailing list