如何在回调期间更新窗口?

时间:2013-12-29 00:13:18

标签: python python-3.x callback tkinter

单击Tkinter按钮并运行命令时,GUI似乎被冻结,直到命令返回。

例如,计数器在2秒后才会更新:

import tkinter as tk
import time

class Window():

    def __init__(self):
        self.clicks = 0
        self.root = tk.Tk()
        self.button_text = tk.StringVar(value="Click " + str(self.clicks))
        self.button = tk.Button(self.root, textvariable=self.button_text,
                                command=self.click)
        self.button.pack()

    def click(self):
        self.clicks += 1
        self.button_text.set("Click " + str(self.clicks))
        time.sleep(2)

if __name__ == '__main__':
    Window().root.mainloop()

有没有办法允许在回调期间更新窗口?

2 个答案:

答案 0 :(得分:1)

您可以调用按钮的update_idletasks方法:

def click(self):
    self.clicks += 1
    self.button_text.set("Click " + str(self.clicks))
    ##################################
    self.button.update_idletasks()
    ##################################
    time.sleep(2)

将该行添加到click将导致按钮的文本立即更新。

答案 1 :(得分:0)

睡眠阻止了gui的事件循环