基本上,我想创建一个程序,在大小为1的cavas中创建一个文本,将其旋转180度(连续),然后将其扩展到其完整大小(比如50),而不是继续旋转它当它完全旋转时,它会再次缩小到1,然后重复这个过程。
这是我想出的唯一想法,请记住,我只是在使用Python一两个星期,所以代码可能需要彻底改变。
from tkinter import *
import time
import random
size=1
angl=0
i=0
canvas=Canvas(width=600, height=600)
canvas.pack()
while i<180:
canvas.delete("all")
canvas.create_text(150,150, text="kappa123",angle=angl,font=("helvetica",size))
angl+=1
size+=1
i+=1
canvas.update()
time.sleep(1/360)
while i>=180:
canvas.delete("all")
canvas.create_text(150,150, text="kappa123",angle=angl,font=("helvetica",size))
angl+=1
size-=1
i+=1
canvas.update()
time.sleep(1/360)
正如你所看到的,它只适用于adn然后永远扩展。
答案 0 :(得分:0)
我相信这是因为你没有离开第二个循环。你的i变量移动到无穷大。要查看示例,请运行此命令并查看输出:
from tkinter import *
import time
j = 0 # Time spent in the first while loop
k = 0 # Time spent in the second while loop
size = 1
angl = 0
i = 0
canvas = Canvas(width=600, height=600)
canvas.pack()
while i < 180:
canvas.delete("all")
canvas.create_text(150, 150, text="kappa123", angle=angl, font=("helvetica", size))
angl += 1
size += 1
i += 1
j += 1
print('First loop', j)
canvas.update()
time.sleep(1 / 360)
while i >= 180:
canvas.delete("all")
canvas.create_text(150, 150, text="kappa123", angle=angl, font=("helvetica", size))
angl += 1
size -= 1
i += 1
k += 1
print('Second loop', k)
canvas.update()
time.sleep(1 / 360)
根据您的技能和舒适程度,您的问题的一个很好的解决方案是创建两个功能,一个是成长,一个是缩小。使用grow函数从1到180,然后在迭代时调用shrink函数并从180缩小到1.
修改强>
class Spinner(Canvas):
def __init__(self, parent):
self.size = 1
# Other data
self.pack()
def expand(self):
for i in range(0, 181):
self.angl += 1
# increment size, update, sleep
self.shrink()
def shrink(self):
for i in range(0, 181):
# increment angle, decrease size, update, sleep
self.expand()
root = Tk()
canvas = Spinner(root)
root.mainloop()