有没有办法调整 tkinter 对象的大小并查看调整大小的效果?

Is there a way to resize tkinter objects and see the resize in action?

我正在尝试制作排序算法动画,但我似乎无法找到一种方法让程序将随机高度调整大小的矩形显示为排序高度的矩形。如果您 运行 脚本,它将只显示排序的矩形,没有任何动画。

import math
import time
import turtle
import random
import array
from tkinter import *


root = Tk()
canvas = Canvas(width=1100, height=900)
a = array.array('i',(0 for c in range(0,22)))
list = []
for i in range(0,22,1):
   a[i] = random.randrange(100,700,10)
   list.append( canvas.create_rectangle(i*50, 900, (i*50)+50, a[i], fill='white',outline="black") )
for v in range(0,22):
    for b in range(v,22):
        if a[b] < a[v]:
            sus = a[v]
            a[v] = a[b]
            a[b] = sus
for o in range(0,22):
   x0, y0, x1, y1 = canvas.coords(list[o])
   y0 = a[o]
   canvas.coords(list[o], x0, y0, x1, y1)
canvas["bg"] = "black"
canvas.pack()
root.mainloop()

您需要在 canvas 之前打包 运行 循环,然后调用 canvas.update()time.sleep() while 运行 循环,以便 window 显示和排序足够慢,您可以看到动画。这是代码,相应地标记了移动和添加的行:

import math
import time
import turtle
import random
import array
from tkinter import *


root = Tk()
canvas = Canvas(width=1100, height=900)
canvas.pack() ### MOVED LINE
canvas["bg"] = "black" ### MOVED LINE

a = array.array('i',(0 for c in range(0,22)))
list = []

for i in range(0,22,1):
    a[i] = random.randrange(100,700,10)
    list.append( canvas.create_rectangle(i*50, 900, (i*50)+50, a[i], fill='white',outline="black") )

for v in range(0,22):
    for b in range(v,22):
        if a[b] < a[v]:
            sus = a[v]
            a[v] = a[b]
            a[b] = sus

for o in range(0,22):
    x0, y0, x1, y1 = canvas.coords(list[o])
    y0 = a[o]
    canvas.coords(list[o], x0, y0, x1, y1)
    canvas.update() ### ADDED LINE
    time.sleep(0.1) ### ADDED LINE
root.mainloop()

在这里,它调用 time.sleep(0.1),以便 window 在动画的“帧”之间等待 ⅒ 秒。您可以随时使用它来代替它。