【问题标题】:Making text shrink and expand enlessly in tkinter canvas使文本在 tkinter 画布中无限收缩和扩展
【发布时间】: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)

如您所见,它只工作一次,然后永远扩展。

【问题讨论】:

    标签: python canvas tkinter tkinter-canvas


    【解决方案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()
    

    【讨论】:

    • 哦,我知道问题出在哪里了。我已经有点知道如何定义函数了,那你会怎么做呢?
    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多