summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-01-10 10:36:03 (GMT)
committerGitHub <noreply@github.com>2024-01-10 10:36:03 (GMT)
commit1b7e0024a16c1820f61c04a8a100498568410afd (patch)
treed8c95f65e9ab7081fb50a7d62472b5c0a6816691
parent5d384b0468b35b393f8ae2d3149d13ff607c9501 (diff)
downloadcpython-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.py12
-rw-r--r--Lib/tkinter/__init__.py2
-rw-r--r--Misc/NEWS.d/next/Library/2024-01-10-12-03-38.gh-issue-113877.RxKlrQ.rst1
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.