如何使用 Tkinter after() 方法?

Rt *_*Rtt 2 python tkinter

我在使用中的after方法时遇到问题Tkinter

计划是以i一秒的间隔打印。我检查了是否after方法是否合适,但我不确切知道。

这是代码。

# -*- coding: utf-8 -*-

from Tkinter import *
import time

root = Tk()
root.title("Program")
root['background'] ='gray'

def command_Print():
    for i in range(0, 10, 1):
        time.sleep(1)
        Label0.after(1)
        Labelvar.set(i)

Labelvar = StringVar()
Labelvar.set(u'original value')
Frame0 = Frame(root)
Frame0.place(x=0, y=0, width=100, height=50)
Label0 = Label(Frame0, textvariable=Labelvar, anchor='w')
Label0.pack(side=LEFT)


Frame_I = Frame(root)
Frame_I.place(x = 100, y = 0, width=100, height=70)
Button_I = Button(Frame_I, text = "Button" , width = 100, height=70, command = command_Print)
Button_I.place(x=0, y=0)
Button_I.grid(row=0, column=0, sticky=W, pady=4)
Button_I.pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 5

after使用单个参数(例如:)after(10)与调用 相同time.sleep,通常应避免使用。由于它让您的 GUI 进入睡眠状态,您的 GUI 将无法响应任何事件(包括用户或操作系统请求刷新或调整窗口大小)

当您after使用两个或多个参数调用时,第二个参数是对您将来要调用的函数的引用。所有剩余的参数都将传递给该函数。

Tkinter 维护一个事件队列。mainloop是监视队列并在事件进来时运行事件after的函数。当您调用 时,您请求的函数只是简单地添加到队列中并带有时间戳。当它准备好被处理时,tkinter 将调用该函数并传入参数。就这么简单。