我正在尝试更新文本并在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'方法。
如果有必要,我会发布更多代码。
感谢。
答案 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
。