在tkinter canvas

时间:2016-10-13 13:56:58

标签: python canvas tkinter tkinter-canvas

基本上,我想创建一个程序,在大小为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然后永远扩展。

1 个答案:

答案 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()