运行 一个函数多次并在 tkinter 上显示输出

Running a function multiple time and displaying output on tkinter

我正在编码 'The Game Of Life' 并使用 tkinter 作为 GUI。我有一个网格(只是一个由 20 x 20 个按钮组成的网格)和一个 'updateGrid' 函数,它获取网格的当前值并根据生命游戏的规则更新它。我将 'updateGrid' 函数链接到 'Next' 按钮,因此如果单击“下一步”按钮,则会更新网格。我想实现一个 'runGrid' 函数(连接到 'Run' 按钮)多次运行 'updateGrid' 函数。我试过这个:

def runGrid():
    for i in range(0, 10):
        updateGrid()
        time.sleep(4)

但似乎 tkinter GUI 仅在 runGrid 函数完成后才更新。我希望 tkinter GUI 在每次迭代后更新,以便用户可以看到 runGrid 函数的进度。

这是按下任何按钮之前网格的屏幕截图:

下面是'runGrid'函数执行后的网格截图:

从第一个位置到最后一个位置的滑翔机(图案)'moves' 移动了 10 次,但是,使用 runGrid 函数只能看到第一个和最后一个位置。如果连续调用updateGrid函数10次,每一步都看得见。

当 GUI(tkitnerPyQt、其他 GUI、其他语言)运行 您的函数时,它们不会立即更新小部件,而是等待您的代码结束他们只更新所有小部件一次。这样他们的工作就更少了,他们只重绘 window 一次所以它不会闪烁。


您可以使用after(milliseconds, function_name, [arg1, ...])定期执行函数而不阻塞mainloop

像这样

def runGrid(i=10):
    updateGrid()
    if i > 0:
       root.after(4000, runGrid, i-1)  # 4000ms = 4s

最终你可以使用root.update()强制mainloop重绘window

def runGrid():
    for i in range(0, 10):
        updateGrid()
        root.update()
        time.sleep(4)