diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-01-10 10:36:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-10 10:36:03 (GMT) |
commit | 1b7e0024a16c1820f61c04a8a100498568410afd (patch) | |
tree | d8c95f65e9ab7081fb50a7d62472b5c0a6816691 | |
parent | 5d384b0468b35b393f8ae2d3149d13ff607c9501 (diff) | |
download | cpython-1b7e0024a16c1820f61c04a8a100498568410afd.zip cpython-1b7e0024a16c1820f61c04a8a100498568410afd.tar.gz cpython-1b7e0024a16c1820f61c04a8a100498568410afd.tar.bz2 |
gh-113877: Fix Tkinter method winfo_pathname() on 64-bit Windows (GH-113900)
winfo_id() converts the result of "winfo id" command to integer, but
"winfo pathname" command requires an argument to be a hexadecimal number
on Win64.
-rw-r--r-- | Lib/test/test_tkinter/test_misc.py | 12 | ||||
-rw-r--r-- | Lib/tkinter/__init__.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2024-01-10-12-03-38.gh-issue-113877.RxKlrQ.rst | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test_tkinter/test_misc.py b/Lib/test/test_tkinter/test_misc.py index 6639eaa..dc8a810 100644 --- a/Lib/test/test_tkinter/test_misc.py +++ b/Lib/test/test_tkinter/test_misc.py @@ -281,6 +281,18 @@ class MiscTest(AbstractTkTest, unittest.TestCase): with self.assertRaises(tkinter.TclError): rgb((111, 78, 55)) + def test_winfo_pathname(self): + t = tkinter.Toplevel(self.root) + w = tkinter.Button(t) + wid = w.winfo_id() + self.assertIsInstance(wid, int) + self.assertEqual(self.root.winfo_pathname(hex(wid)), str(w)) + self.assertEqual(self.root.winfo_pathname(hex(wid), displayof=None), str(w)) + self.assertEqual(self.root.winfo_pathname(hex(wid), displayof=t), str(w)) + self.assertEqual(self.root.winfo_pathname(wid), str(w)) + self.assertEqual(self.root.winfo_pathname(wid, displayof=None), str(w)) + self.assertEqual(self.root.winfo_pathname(wid, displayof=t), str(w)) + def test_event_repr_defaults(self): e = tkinter.Event() e.serial = 12345 diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 1248824..2590acd 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -1260,6 +1260,8 @@ class Misc: def winfo_pathname(self, id, displayof=0): """Return the pathname of the widget given by ID.""" + if isinstance(id, int): + id = hex(id) args = ('winfo', 'pathname') \ + self._displayof(displayof) + (id,) return self.tk.call(args) diff --git a/Misc/NEWS.d/next/Library/2024-01-10-12-03-38.gh-issue-113877.RxKlrQ.rst b/Misc/NEWS.d/next/Library/2024-01-10-12-03-38.gh-issue-113877.RxKlrQ.rst new file mode 100644 index 0000000..173e185 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-01-10-12-03-38.gh-issue-113877.RxKlrQ.rst @@ -0,0 +1 @@ +Fix :mod:`tkinter` method ``winfo_pathname()`` on 64-bit Windows. |