Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 标签小部件未使用';在'之后;循环的Tkinter方法_Time_Python 3.x_Tkinter - Fatal编程技术网

Time 标签小部件未使用';在'之后;循环的Tkinter方法

Time 标签小部件未使用';在'之后;循环的Tkinter方法,time,python-3.x,tkinter,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

我试图在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函数调用并以空闲状态显示“string”的每个成员。我不明白为什么self.message2不显示。它显示在脚本中不包含“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()

它不会显示,因为您正在阻止事件循环处理事件,特别是导致它在屏幕上重新绘制窗口的事件。你需要重新构造你的代码,以避免只使用一个参数在
之后调用

self.message2.configure()
就足够了-你不必再次调用
self.message2.grid()
。@a.Rodas我认为这不会影响结果。我只是在没有再次调用grid的情况下尝试了一下,但没有成功。我将此方法作为类的一部分使用,并且在方法调用之后有几个命令。由于某种原因,此方法只调用一次,就会显示字符串[0],然后它会直接跳转到类中的以下命令中。它仅在“字符串”列表之后继续。您知道如何修改它,使其在完成之前不会继续超过def rightString吗?谢谢。@DavidJ。我在我的答案中添加了一个可能的解决方案。你使用“递归”这个词,但这并不是真正的递归(对某些人来说,它有负面的含义)。函数不调用自己,函数只是将自己放在队列中,稍后由事件循环调用。@BryanOakley是的,严格来说这不是递归-我不明白的是为什么它会对某人有负面的含义。@a.Rodas:递归被许多人误解*,而我们这些曾经在这个街区呆过几次的人都知道,在坏人手里是很危险的。(*我过去不认为这是真的,但我发誓,我的团队采访的75%的人都不能编写最简单的递归过程)。