Python 实现“嫦娥奔月“小动画,一起来看看这漂亮的嫦娥吧

简介: Python 实现“嫦娥奔月“小动画,一起来看看这漂亮的嫦娥吧

中秋节快要来了,“嫦娥奔月”是我国古代的一个美丽神话,它反映了古代人类祖先飞天和探索宇宙苍穹的梦想。现在伟大的中国航天人为实现这一梦想取得了重大科技成就,神舟系列载人航天飞船发射成功是我们每个炎黄子孙的骄傲!


 恰逢神舟十二号今天返航,中国航天员首次从中国空间站返回地球!而且神舟十三号也即将准备发射!!


 一个伟大的日子里做个小动画能否圆个飞天梦想呢,算是痴人说梦吧!不废话了,翠花,上酸菜:



源代码:


import tkinter as tk
from time import sleep
def init():
    global cv,chang
    cv.delete('all')
    img1 = tk.PhotoImage(file='MOON.gif')
    img2 = tk.PhotoImage(file='CHANG.gif')
    moon = cv.create_image(100,100,image=img1)
    chang = cv.create_image(936,680,image=img2)
    cv.update()
def move1():
    global cv,btn1,btn2,chang
    btn1.configure(state=tk.DISABLED)
    btn2.configure(state=tk.DISABLED)
    cv.coords(chang,936,680)
    t = [i for i in range(10,72)]
    for i in range(62):
        cv.move(chang,-13,-9)
        cv.update()
        sleep(t[i]/323)
    btn1.configure(state=tk.NORMAL)
    btn2.configure(state=tk.NORMAL)
def move2():
    global cv,btn1,btn2,chang
    btn1.configure(state=tk.DISABLED)
    btn2.configure(state=tk.DISABLED)
    cv.coords(chang,936,680)
    x = lambda i:i*30
    y = lambda i:0.6*i*i+110
    for t in range(30,3,-1):
        cv.coords(chang,x(t),y(t))
        cv.update()
        sleep(0.2)
    btn1.configure(state=tk.NORMAL)
    btn2.configure(state=tk.NORMAL)
def main():
    global cv,chang,btn1,btn2
    root = tk.Tk()
    root.geometry('1024x768')
    root.title(u'嫦娥奔月')
    root.resizable(False,False)
    cv = tk.Canvas(root, width=1024, height=768, bg='black')
    cv.pack()
    btn1 = tk.Button(root,text=' 嫦娥直线奔月',command=move1)
    btn1.place(x=80,y=680)
    btn2 = tk.Button(root,text=' 嫦娥抛物线奔月',command=move2)
    btn2.place(x=220,y=680)
    img1 = tk.PhotoImage(file='MOON.gif')
    img2 = tk.PhotoImage(file='CHANG.gif')
    moon = cv.create_image(100,100,image=img1)
    chang = cv.create_image(936,680,image=img2)
    root.mainloop()
if __name__=="__main__":
    app = main()


注:tk.Canvas.coords(object,x,y) 参数方程直接作x,y坐标参数移动object非常方便。

 



素材图片


20210917205545782.gif20210917205610258.gif




程序效果

image.gif

俗话说每个人都有一个哈姆雷特,在这中秋佳节团圆日里,祝愿每个为此文点赞的人,都会有一个漂亮的嫦娥姐姐!




附录


tkinter Canvas 组件


Canvas(画布)组件为 Tkinter 的图形绘制提供了基础。Canvas 是一个高度灵活的组件,你可以用它绘制图形和图表,创建图形编辑器,并实现各种自定义的小部件。


Canvas(root, width=100, height=100) 单位像素

创建的对象一直保留,直到被修改才会覆盖


修改方法:


w.coords() 移动对象

w.itemcofig() 设置对象属性

w.delete() 删除对象

Canvas 组件支持对象

arc(弧形、弦或扇形)

bitmap(内建的位图文件或 XBM 格式的文件)

image(BitmapImage 或 PhotoImage 的实例对象)

line(线)

oval(圆或椭圆形)

polygon(多边形)

rectangle(矩形)

text(文本)

window(组件)

其中,弦、扇形、椭圆形、圆形、多边形和矩形这些“封闭式”图形都是由轮廓线和填充颜色组成的,但都可以设置为透明(传入空字符串表示透明)。


常用创建方法:


Create_line(x1,y1,x2,y2,dash=(4,4), fill='blue') -- 直线, 虚线(指定dash)

Create_rectangle() -- 矩形,添加对角坐标

Create_oval() -- 椭圆,使用的是长方形的坐标绘制的,正方形坐标时就是圆形

Create_text(x,y, text='F') --字体中心点坐标

create_arc(bbox, **options) -- 根据 bbox (x1, y1, x2, y2) 创建一个扇形(PIESLICE)、弓形(CHORD)或弧形(ARC)


style


1. 指定该方法创建的是扇形(PIESLICE)、弓形(CHORD)还是弧形(ARC)


2. 默认创建的是扇形


create_polygon(coords, **options) -- 根据 coords 给定的坐标绘制一个多边形


坐标系


由于画布可能比窗口大(带有滚动条的 Canvas 组件),因此 Canvas 组件可以选择使用两种坐标系:


窗口坐标系:以窗口的左上角作为坐标原点

画布坐标系:以画布的左上角作为坐标原点

将窗口坐标系转换为画布坐标系,可以使用 canvasx() 或 canvasy() 方法:

def callback(event):
    canvas = event.widget
    x = canvas.canvasx(event.x)
    y = canvas.canvasy(event.y)
    print canvas.find_closest(x, y)


对象显示顺序:


Canvas 组件中创建的画布对象都会被列入显示列表中,

默认情况下新创建的会覆盖旧的画布对象的重叠部分,即位于显示列表上方的画布对象将覆盖下方那个)。当然,显示列表中的画布对象可以被重新排序。


指定画布对象


Canvas 组件提供几种方法让你指定画布对象:

Item handles (tkinter自动创建的唯一的画布对象的 ID--整型)

Tags  ( 类似于text的 Tags但 是仅为画布对象所拥有)

ALL  (Canvas中所有对象)

CURRENT  (鼠标指针下的画布对象(如果有的话))


end.





目录
相关文章
|
8月前
|
Python Windows
用 Python 将神龙大侠搞怪 GIF 转为字符动画
用 Python 将神龙大侠搞怪 GIF 转为字符动画
60 0
用 Python 将神龙大侠搞怪 GIF 转为字符动画
|
算法 异构计算 Python
用 python 制作高逼格的数学动画
用 python 制作高逼格的数学动画
用 python 制作高逼格的数学动画
|
22小时前
|
图形学 计算机视觉 Python
Python如何利用PIL工具包制作gif动画效果
Python如何利用PIL工具包制作gif动画效果
42 0
|
7月前
|
数据可视化 Python
【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码
【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码
240 0
【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码
|
7月前
|
数据可视化 Python
【100天精通Python】Day69:Python可视化_实战:导航定位中预测轨迹和实际轨迹的3D动画,示例+代码
【100天精通Python】Day69:Python可视化_实战:导航定位中预测轨迹和实际轨迹的3D动画,示例+代码
116 0
|
7月前
|
数据可视化 Python
【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互
【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互
156 0
|
10月前
|
机器学习/深度学习 缓存 数据可视化
用Python动画来展示二阶贝赛尔曲线
在Photoshop等多种设计软件中,画曲线时主要用到的是就是贝赛尔曲线,就是类似于上图中的这个曲线,设计师们可以通过控制中间的控制点来画出自己需要的曲线。
|
11月前
|
计算机视觉 Python
Python应用 | 三行代码实现GIF动画
Python应用 | 三行代码实现GIF动画
133 0
python 如何绘制动图(将300张图片生成gif动画)
最近,在绘制SST月均数据时,突然想看看近几十年sst的大致变化过程。说白了就是绘制一张gif动画,也算是学习过程啦。
python 如何绘制动图(将300张图片生成gif动画)
|
数据安全/隐私保护 计算机视觉 Python
我用Python导出了两万行字符,做成了动画...
前几天看了B站Up主何同学的视频,有了这个导出字符文档做成视频想法,比我想象中要费时间,卡点实在是太难了… 但是一旦脑子里有个想法,不实现出来浑身难受…
131 0
我用Python导出了两万行字符,做成了动画...