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.
This commit is contained in:
Serhiy Storchaka 2024-01-10 12:36:03 +02:00 committed by GitHub
parent 5d384b0468
commit 1b7e0024a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 0 deletions

View File

@ -281,6 +281,18 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
with self.assertRaises(tkinter.TclError): with self.assertRaises(tkinter.TclError):
rgb((111, 78, 55)) 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): def test_event_repr_defaults(self):
e = tkinter.Event() e = tkinter.Event()
e.serial = 12345 e.serial = 12345

View File

@ -1260,6 +1260,8 @@ class Misc:
def winfo_pathname(self, id, displayof=0): def winfo_pathname(self, id, displayof=0):
"""Return the pathname of the widget given by ID.""" """Return the pathname of the widget given by ID."""
if isinstance(id, int):
id = hex(id)
args = ('winfo', 'pathname') \ args = ('winfo', 'pathname') \
+ self._displayof(displayof) + (id,) + self._displayof(displayof) + (id,)
return self.tk.call(args) return self.tk.call(args)

View File

@ -0,0 +1 @@
Fix :mod:`tkinter` method ``winfo_pathname()`` on 64-bit Windows.