运行 一个函数多次并在 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(tkitner
、PyQt
、其他 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)
我正在编码 '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(tkitner
、PyQt
、其他 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)