0

我正在尝试更新 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 不显示。它显示在脚本的其他部分中,不包括“后”方法。

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

谢谢。

4

2 回答 2

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()
于 2013-03-23T20:44:06.110 回答
0

它不会显示,因为您正在阻止事件循环处理事件,特别是导致它在屏幕上重绘窗口的事件。您需要重组代码以避免after仅使用单个参数进行调用。

于 2013-03-23T21:56:59.877 回答