10.11Python图形用户界面库tkinter(11):动画

@通过画布删除对象和重绘产生动画

class EnlargeShrinkCircle:
    def __init__(self):

        # 窗口和标题
        window = Tk()
        window.title("缩放动画")

        # 初始半径
        self.radius = 50

        # 打包一个白色画布到窗口
        self.canvas = Canvas(window, width=200, height=200, bg="white")
        self.canvas.pack()

        # 画个圆
        self.drawOval()

        # 绑定鼠标左键和右键事件到画布,分别对应不同的监听函数,在函数内实现圆的缩放
        self.canvas.bind(sequence="", func=self.increaseCircle)
        self.canvas.bind(sequence="", func=self.decreaseCircle)

        # 消息循环
        window.mainloop()

    # 以self.radius为半径在画布上画圆,以tag="oval"标记该圆
    def drawOval(self):
        self.canvas.create_oval(100 - self.radius, 100 - self.radius, 100 + self.radius, 100 + self.radius, tag="oval")

    # 放大tag为"oval"的圆
    def increaseCircle(self, event):
        if self.radius < 100:
            # 增大圆的半径
            self.radius += 2

            # 删除并重新绘制更大的圆
            self.canvas.delete("oval")
            self.drawOval()

    # 缩小tag为"oval"的圆
    def decreaseCircle(self, event):
        if self.radius > 2:

            # 减小圆的半径
            self.radius -= 2

            # 删除并重新绘制
            self.canvas.delete("oval")
            self.drawOval()
EnlargeShrinkCircle()

执行效果:点击鼠标左键放大圆,右键缩小圆
10.11Python图形用户界面库tkinter(11):动画_第1张图片

@通过画布移动对象产生动画

class AnimationDemo:
    def __init__(self):

        # 窗口和标题
        window = Tk()
        window.title("动画示例")

        # 定义x方向上的起点位置和边界
        x = 0
        width = 300

        # 定义每次移动的步长
        dx = 2

        # 打包一个白色画布到窗口
        canvas = Canvas(window, width=300, height=100, bg="white")
        canvas.pack()

        # 在起点绘制文字,以tag="text"标记
        canvas.create_text(x, 50, text="学Python,得永生", tag="text")

        # 不断地移动画布上的文本
        while True:
            canvas.after(100)  # 程序在这里暂停100毫秒

            # 将文本移动(2,0)
            canvas.move("text", dx, 0)

            # 刷新画布
            canvas.update()

            # 未越界时,不停更新横坐标
            if x < width:
                x += dx

            # 越界时,清除并重绘画布内容
            else:
                # 重置x方向的起点位置
                x = 0

                # 删除文字并重新绘制在起始位置
                canvas.delete("text")
                canvas.create_text(x, 50, text="学Python,得永生", tag="text")

        # 消息循环
        window.mainloop()
AnimationDemo()

执行效果:文字在窗口中不断向右移动,一旦从右侧飞出,则重新由左侧飞入
10.11Python图形用户界面库tkinter(11):动画_第2张图片

你可能感兴趣的:(Python,语言程序设计)