bpo-44404: tkinter `after` support callable classes (GH-26812)

This commit is contained in:
E-Paine 2021-06-23 11:30:24 +01:00 committed by GitHub
parent 5c7940257e
commit e9c8f784fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 1 deletions

View File

@ -841,7 +841,11 @@ def callit():
self.deletecommand(name)
except TclError:
pass
callit.__name__ = func.__name__
try:
callit.__name__ = func.__name__
except AttributeError:
# Required for callable classes (bpo-44404)
callit.__name__ = type(func).__name__
name = self._register(callit)
return self.tk.call('after', ms, name)

View File

@ -1,3 +1,4 @@
import functools
import unittest
import tkinter
import enum
@ -98,6 +99,12 @@ def callback(start=0, step=1):
with self.assertRaises(tkinter.TclError):
root.tk.call(script)
# Call with a callable class
count = 0
timer1 = root.after(0, functools.partial(callback, 42, 11))
root.update() # Process all pending events.
self.assertEqual(count, 53)
def test_after_idle(self):
root = self.root

View File

@ -0,0 +1 @@
:mod:`tkinter`'s ``after()`` method now supports callables without the ``__name__`` attribute.