您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用after方法使回调定期运行?

如何使用after方法使回调定期运行?

注意:以下代码是在Python 3.5中编写和测试的。例如,在调用时,可能需要进行较小的更改super

文档描述了该Widget.after方法,如下所示:

注册在给定时间后调用的警报回调。

after方法主要用于在给定的延迟后安排函数调用。例如,以下代码将在一秒后安排对函数调用

import tkinter as tk

def speak():
    print("Hello World!")

root = tk.Tk()
root.after(1000, speak)

# Output
Hello World!

为了使一个函数定期运行,可以使它在自身主体的末端进行调用。但是,afterWidget类中的方法,因此需要一个小部件。因此,最好的选择通常是将调度的函数放在一个类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()

请记住以下几点。

其他 2022/1/1 18:46:54 有578人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶