Python TKinter 连续睡眠(或之后)

Python TKinter Consecutive Sleeps (or afters)

我的(我会说)相当简单的代码有困难。我的目标:我想创建一个应用程序,它接受单行 .txt 并将它们分别添加到文本框 (TKinter),中间间隔几秒钟。

    def startRoutine():
        file = open(filename, "r")
        all_lines_variable = file.readlines()
        for i in range(0, len(all_lines_variable)):
             root.after(1000, t.insert(tk. END, all_lines_variable[i]))

(t为文本框,filename打开目录)

我想我在做什么:等一下,然后将字符串添加到文本框。重复下一行,直到文本中没有任何行。

我实际上在做什么:每行等待 1 秒,然后打印所有行。 因此,我的问题是:如何真正让程序在插入之间等待?

非常感谢!

after 不会像 time.sleep 那样暂停程序,它只是将某些内容安排在 运行 之后并继续进行。因此,您的所有行都安排在 1000 毫秒后 运行。要做你想做的事,你可以使用 i 变量给每行一个间隔 1000 毫秒的时间:

from functools import partial

def startRoutine():
    file = open(filename, "r")
    all_lines_variable = file.readlines()
    for i in range(0, len(all_lines_variable)):
         root.after(1000 * i, partial(t.insert, tk.END, all_lines_variable[i]))
         

或者(更常见)您可以创建第二个函数作为循环,它会一直等到它被调用以安排下一个循环:

def loop(lines):
    if lines:
        t.insert(tk.END, lines.pop(0))
        root.after(1000, loop, lines)
        
def startRoutine():
    file = open(filename, "r")
    all_lines_variable = file.readlines()
    loop(all_lines_variable) # start loop