From 50866e9ed3e4e0ebb60c20c3483a8df424c02722 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Fri, 5 Apr 2019 04:17:13 -0600 Subject: [PATCH] bpo-25451: Add transparency methods to tkinter.PhotoImage. (GH-10406) --- Doc/whatsnew/3.8.rst | 5 +++++ Lib/tkinter/__init__.py | 9 +++++++++ Lib/tkinter/test/test_tkinter/test_images.py | 9 +++++++++ .../Library/2018-11-07-23-44-25.bpo-25451.re_8db.rst | 2 ++ 4 files changed, 25 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2018-11-07-23-44-25.bpo-25451.re_8db.rst diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index 411f2299b29..0fc4d774bcd 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -379,6 +379,11 @@ Added method :meth:`~tkinter.Canvas.moveto` in the :class:`tkinter.Canvas` class. (Contributed by Juliette Monsel in :issue:`23831`.) +The :class:`tkinter.PhotoImage` class now has +:meth:`~tkinter.PhotoImage.transparency_get` and +:meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by +Zackery Spytz in :issue:`25451`.) + time ---- diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index ae493ed3aaa..57d5b257282 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -4124,6 +4124,15 @@ class PhotoImage(Image): args = args + ('-from',) + tuple(from_coords) self.tk.call(args) + def transparency_get(self, x, y): + """Return True if the pixel at x,y is transparent.""" + return self.tk.getboolean(self.tk.call( + self.name, 'transparency', 'get', x, y)) + + def transparency_set(self, x, y, boolean): + """Set the transparency of the pixel at x,y.""" + self.tk.call(self.name, 'transparency', 'set', x, y, boolean) + class BitmapImage(Image): """Widget which can display images in XBM format.""" diff --git a/Lib/tkinter/test/test_tkinter/test_images.py b/Lib/tkinter/test/test_tkinter/test_images.py index 85a8cd0495b..2805d35a1f5 100644 --- a/Lib/tkinter/test/test_tkinter/test_images.py +++ b/Lib/tkinter/test/test_tkinter/test_images.py @@ -320,6 +320,15 @@ class PhotoImageTest(AbstractTkTest, unittest.TestCase): self.assertEqual(image3.get(0, 0), image.get(4, 6)) self.assertEqual(image3.get(1, 2), image.get(5, 8)) + def test_transparency(self): + image = self.create() + self.assertEqual(image.transparency_get(0, 0), True) + self.assertEqual(image.transparency_get(4, 6), False) + image.transparency_set(4, 6, True) + self.assertEqual(image.transparency_get(4, 6), True) + image.transparency_set(4, 6, False) + self.assertEqual(image.transparency_get(4, 6), False) + tests_gui = (MiscTest, BitmapImageTest, PhotoImageTest,) diff --git a/Misc/NEWS.d/next/Library/2018-11-07-23-44-25.bpo-25451.re_8db.rst b/Misc/NEWS.d/next/Library/2018-11-07-23-44-25.bpo-25451.re_8db.rst new file mode 100644 index 00000000000..e0a9ea0c1fb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-11-07-23-44-25.bpo-25451.re_8db.rst @@ -0,0 +1,2 @@ +Add transparency methods to :class:`tkinter.PhotoImage`. Patch by Zackery +Spytz.