注意:以下代码是在Python 3.5中编写和测试的。例如,在调用时,可能需要进行较小的更改super
。
该after
方法主要用于在给定的延迟后安排函数调用。例如,以下代码将在一秒后安排对函数的调用:
import tkinter as tk
def speak():
print("Hello World!")
root = tk.Tk()
root.after(1000, speak)
# Output
Hello World!
为了使一个函数定期运行,可以使它在自身主体的末端进行调用。但是,after
是Widget
类中的方法,因此需要一个小部件。因此,最好的选择通常是将调度的函数放在一个类extension中Widget
。
以下代码"Hello World!"
每隔一秒钟在控制台中打印一次。
import tkinter as tk
class Foo(tk.Tk):
def periodically_speak(self):
print("Hello World!")
self.after(2000, self.periodically_speak)
foo = Foo()
foo.periodically_speak()
可能需要将参数传递给定期运行的方法。为此,该after
方法将回调后的每个参数解压缩为要传递给回调的参数。例如,root.after(1000, foo, a, b, c)
将安排对的呼叫foo(a, b, c)
。下面的示例演示如何使用此功能来确定功能的行为。
import tkinter as tk
class Foo(tk.Tk):
def periodically_speak(self, text):
print(text)
self.after(2000, self.periodically_speak, text)
foo = Foo()
foo.periodically_speak("Good night world!")
这些after
方法返回一个字符串,该字符串对应于调用的ID。可以将其传递给该after_cancel
方法,以取消已安排的呼叫。
以下示例将"Hello World!"
每秒开始打印,但是在按下按钮时将停止打印。
import tkinter as tk
class Foo(tk.Tk):
def __init__(self):
super().__init__()
self.callId = None
self.button = tk.Button(self, text="Stop", command=self.stop)
self.button.pack()
def periodically_speak(self):
print("Hello World!")
self.callId = self.after(2000, self.periodically_speak)
def stop(self):
if self.callId is not None:
self.after_cancel(self.callId)
foo = Foo()
foo.periodically_speak()
请记住以下几点。