summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhikang Yan <2951256653@qq.com>2024-12-01 19:29:27 (GMT)
committerGitHub <noreply@github.com>2024-12-01 19:29:27 (GMT)
commit7ea523f47cdb4cf512a1e2ae1f93f5d19a48945d (patch)
tree0884a16b969713d9cb7755c6703d0146c8d39702
parent04673d2f14414fce7a2372de3048190f66488e6e (diff)
downloadcpython-7ea523f47cdb4cf512a1e2ae1f93f5d19a48945d.zip
cpython-7ea523f47cdb4cf512a1e2ae1f93f5d19a48945d.tar.gz
cpython-7ea523f47cdb4cf512a1e2ae1f93f5d19a48945d.tar.bz2
gh-126899: Add `**kw` to `tkinter.Misc.after` and `tkinter.Misc.after_idle` (#126900)
--------- Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r--Doc/whatsnew/3.14.rst8
-rw-r--r--Lib/test/test_tkinter/test_misc.py20
-rw-r--r--Lib/tkinter/__init__.py8
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2024-11-16-10-52-48.gh-issue-126899.GFnfBt.rst2
5 files changed, 31 insertions, 8 deletions
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index 869a47c..f9322da 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -576,6 +576,14 @@ sys
from other interpreters than the one it's called in.
+tkinter
+-------
+
+* Make tkinter widget methods :meth:`!after` and :meth:`!after_idle` accept
+ arguments passed by keyword.
+ (Contributed by Zhikang Yan in :gh:`126899`.)
+
+
unicodedata
-----------
diff --git a/Lib/test/test_tkinter/test_misc.py b/Lib/test/test_tkinter/test_misc.py
index 579ce2a..475edcb 100644
--- a/Lib/test/test_tkinter/test_misc.py
+++ b/Lib/test/test_tkinter/test_misc.py
@@ -123,9 +123,9 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
def test_after(self):
root = self.root
- def callback(start=0, step=1):
+ def callback(start=0, step=1, *, end=0):
nonlocal count
- count = start + step
+ count = start + step + end
# Without function, sleeps for ms.
self.assertIsNone(root.after(1))
@@ -161,12 +161,18 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
root.update() # Process all pending events.
self.assertEqual(count, 53)
+ # Set up with callback with keyword args.
+ count = 0
+ timer1 = root.after(0, callback, 42, step=11, end=1)
+ root.update() # Process all pending events.
+ self.assertEqual(count, 54)
+
def test_after_idle(self):
root = self.root
- def callback(start=0, step=1):
+ def callback(start=0, step=1, *, end=0):
nonlocal count
- count = start + step
+ count = start + step + end
# Set up with callback with no args.
count = 0
@@ -193,6 +199,12 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
with self.assertRaises(tkinter.TclError):
root.tk.call(script)
+ # Set up with callback with keyword args.
+ count = 0
+ idle1 = root.after_idle(callback, 42, step=11, end=1)
+ root.update() # Process all pending events.
+ self.assertEqual(count, 54)
+
def test_after_cancel(self):
root = self.root
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index dd7b3e1..bfec04b 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -847,7 +847,7 @@ class Misc:
if not name: return None
return self._nametowidget(name)
- def after(self, ms, func=None, *args):
+ def after(self, ms, func=None, *args, **kw):
"""Call function once after given time.
MS specifies the time in milliseconds. FUNC gives the
@@ -861,7 +861,7 @@ class Misc:
else:
def callit():
try:
- func(*args)
+ func(*args, **kw)
finally:
try:
self.deletecommand(name)
@@ -875,13 +875,13 @@ class Misc:
name = self._register(callit)
return self.tk.call('after', ms, name)
- def after_idle(self, func, *args):
+ def after_idle(self, func, *args, **kw):
"""Call FUNC once if the Tcl main loop has no event to
process.
Return an identifier to cancel the scheduling with
after_cancel."""
- return self.after('idle', func, *args)
+ return self.after('idle', func, *args, **kw)
def after_cancel(self, id):
"""Cancel scheduling of function identified with ID.
diff --git a/Misc/ACKS b/Misc/ACKS
index cd34846..fc4b83a 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -2079,6 +2079,7 @@ Arnon Yaari
Alakshendra Yadav
Hirokazu Yamamoto
Masayuki Yamamoto
+Zhikang Yan
Jingchen Ye
Ka-Ping Yee
Chi Hsuan Yen
diff --git a/Misc/NEWS.d/next/Library/2024-11-16-10-52-48.gh-issue-126899.GFnfBt.rst b/Misc/NEWS.d/next/Library/2024-11-16-10-52-48.gh-issue-126899.GFnfBt.rst
new file mode 100644
index 0000000..c1a0ed6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-11-16-10-52-48.gh-issue-126899.GFnfBt.rst
@@ -0,0 +1,2 @@
+Make tkinter widget methods :meth:`!after` and :meth:`!after_idle` accept
+arguments passed by keyword.