使文本在 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 画布中无限收缩和扩展的主要内容,如果未能解决你的问题,请参考以下文章

tkinter画布窗口未从Powershell打开

Python tkinter 标签方向

tkinter笔记:画布canvas

在 tkinter 画布中显示图像

画布上的 tkinter 菜单栏

Tkinter 画布图像适用于 Windows 但不适用于 OSX