标签小部件不使用Tkinter for循环中的'after'方法更新

时间:2013-03-23 19:41:49

标签: time python-3.x tkinter

我正在尝试更新文本并在tkinter中显示for循环内的标签。根据.after方法,这应该在一秒钟之后发生。

def rightString(self, gro, string):
    for z in string:
        self.message2.configure(text="Good job, %s is a member of %s!" % (z, gro.getName()))

        root.after(1000)
        self.message2.grid()
        print(z, " should be displayed!")

我希望这是足够的信息;我觉得我有一些非常基本的东西。 print函数调用并显示IDLE中'string'的每个成员。我不明白为什么self.message2不显示。它显示在脚本的其他部分,不包括'after'方法。

如果有必要,我会发布更多代码。

感谢。

2 个答案:

答案 0 :(得分:1)

如果您想每秒更改标签的文字,则必须使用after再次安排该功能:

def rightString(self, gro, string):
    if string:
        z = string[0]
        self.message2.configure(text="Good job, %s is a member of %s!" % (z, gro.getName()))
        root.after(1000, lambda: self.rightString(gro, string[1:])
        print(z, " should be displayed!")

正如我在评论中所说,每次更改文本时都不需要调用grid()


编辑:要在处理完所有字符串后执行不同的功能,您可以在else块中添加对它的调用:

def rightString(self, gro, string):
    if string:
        # ...
    else:
        doSomethingElse()

答案 1 :(得分:0)

它不显示,因为您阻止事件循环处理事件,特别是导致它重绘窗口上的窗口的事件。您需要重新构建代码,以避免仅使用一个参数调用after