使用tkinter,如何使用after
方法定期运行函数?
例如,我有一个只在控制台中打印内容的说
函数:
def speak():
print("Hello, world!")
如何使用after
方法每秒调用speak
函数?
注意:以下代码是用Python3.5编写和测试的。例如,在调用super
时,可能需要进行一些小的更改。
留档描述Widget.after
方法如下:
后(delay_ms,回调=无,*args)
注册在给定时间后调用的报警回调。
调度函数
after
方法主要用于在给定延迟后安排函数调用。例如,以下代码在一秒钟后安排对函数的调用:
import tkinter as tk
def speak():
print("Hello world!")
root = tk.Tk()
root.after(1000, speak)
# Output
Hello world!
使函数定期运行
为了使函数周期性地运行,可以让它在自己的主体末尾调用自己。但是,after
是来自Widget
类的方法,因此需要一个Widget。因此,最好的选择通常是将调度函数放在扩展小部件的类中。
下面的代码打印“你好,世界!”
在控制台中每隔一秒钟。
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!")
取消电话
方法之后的返回一个字符串,该字符串对应于调用的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()
旁注
应记住以下几点。
在
之后的方法并不能保证在给定的延迟之后调用回调,而是在它之后调用。因此,之后的不应该用于需要精度的地方。
使用time.sleep
来调度或定期运行函数可能很有诱惑力。在GUI上工作时必须避免这种情况,因为“睡眠”会暂停当前线程,而当前线程大部分时间是主线程。例如,这可能会停止小部件的刷新,程序将停止响应。
问题内容: 使用tkinter,如何使用该方法使函数定期运行? 例如,我有一个仅在控制台中打印内容的函数: 如何使用该方法每秒调用一次函数? 问题答案: 注意:以下代码是在Python 3.5中编写和测试的。例如,在调用时,可能需要进行较小的更改。 该文档描述了该方法,如下所示: after(delay_ms,callback = None,* args) 注册在给定时间后调用的警报回调。 安排功
如果可以在该代码中运行onCreate方法,我认为应该有类似的代码
问题内容: 我奋力奔跑名为单个测试方法在文件中使用。我尝试了以下组合: 在每种情况下, 都将执行文件中的 所有 测试方法。如何只选择一种方法呢? 该类的名称为,版本为3.2.8。 问题答案: 以下命令在单个方法上运行测试: 对于新版本的phpunit,它只是:
我正在努力运行一个名为的测试方法,该方法位于文件中。我尝试了以下组合: 在每种情况下,都会执行文件中的所有测试方法。如何只选择一种方法? 该类的名称为,的版本为3.2.8。
问题内容: 我从迁移到了,我找不到等效的。(A有两个参数:要运行的函数和两次调用之间的毫秒数。) 有这样的等同物吗? 如果没有,那么在没有冒一会儿风险的情况下实现此目标的最干净方法是什么? 问题答案: 对于3.5以下的Python版本: 对于Python 3.5及更高版本:
我想定期运行代码在django为此我下载了芹菜并试图配置它 添加到设置中。派克 他做了一个芹菜。py文件 创建了一个任务。py文件 依次发射了一切 节拍带给我的 芹菜。0.5(奇点)正在启动本地时间- 但工人每15秒就扔下一个 [2021-02-19 16:18:02,275:警告/SpawnPoolWorker-1]c:\用户\admin\appdata\本地\程序\python\python3