使文本在 tkinter 画布中无限收缩和扩展
Posted
技术标签:
【中文标题】使文本在 tkinter 画布中无限收缩和扩展【英文标题】:Making text shrink and expand enlessly in tkinter canvas 【发布时间】:2017-02-22 16:48:05 【问题描述】:基本上,我想编写一个程序,在 cavas 中创建一个大小为 1 的文本,将其旋转 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)
如您所见,它只工作一次,然后永远扩展。
【问题讨论】:
【参考方案1】:我相信这是因为您没有离开第二个循环。你的 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,然后在您迭代并从 180 缩小到 1 时调用 shrink 函数。
编辑
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()
【讨论】:
哦,我知道问题出在哪里了。我已经有点知道如何定义函数了,那你会怎么做呢?以上是关于使文本在 tkinter 画布中无限收缩和扩展的主要内容,如果未能解决你的问题,请参考以下文章