阅读 772

Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树

马上不就到圣诞节了嘛,我看到朋友圈里很多小伙伴再纷纷炫耀自己收到的专属圣诞树,今天小编给大家介绍的是通过Python绘制的五合一版圣诞树:圣诞树+落叶+雪花+背景音乐+浪漫弹窗。感兴趣的小伙伴快来学习一下吧

目录
  • 一、背景故事

  • 二、五合一版圣诞树制作过程

    • 1.基础圣诞树

    • 2.落叶效果

    • 3.雪花特效

    • 4.背景音乐

    • 5.浪漫弹窗

    • 6.署名制作

  • 三、源码分享

    一、背景故事

    圣诞节风波

    马上不就到圣诞节了嘛,我看到朋友圈里很多小伙伴再纷纷炫耀自己收到的专属圣诞树,也有小伙伴私信我,说还没有自己的圣诞树!!!

    作为我的粉丝朋友们,我不允许大家还没有专属于自己的圣诞树!我要让大家收到最特别最美丽的圣诞树,于是…冒着…期末挂科…的风险…我重拾了自己失传已久的海龟画图: 海龟画图全解-值得你一看!(这篇文章写了很久了,是一些海龟画图最基础的操作,不太了解的小伙伴们可以拿这篇文章来快速入门海龟画图!)

    终于…经过…昨天…一个晚上…的艰苦…奋斗,我觉得我又行了!

    从最底层开始,我一步一步完善代码设计出了:圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树! 话不多说,先看效果:

    哎嘿嘿,是不是非常的nice呀!看到这先别着急,为了我的期末成绩着想,是不是得先给我来个一键三连呀!!!

    接下来让我们慢慢来聊,请大家前排就坐,爆米花自取哟

    二、五合一版圣诞树制作过程

    需要用到的模块:

    1
    2
    3
    4
    5
    6
    import turtle as t
    import random
    import pygame
    import threading
    import time
    import tkinter as tk

    这是我们要用到的一些基础库,没有安装的小伙伴们可以安装一下,要求编译器是Python3的环境。

    1.基础圣诞树

    画主体树的部分看似有些麻烦,但只要你把其中的几个循环看明白了就行了,无非就是几个函数重复控制画笔移动!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    t.screensize(bg='black'# 定义背景颜色,可以自己换颜色
     
    def loving_heart(r):
        l = 2 * r
        t.left(45)
        t.forward(l)
        t.circle(r, 180)
        t.right(90)
        t.circle(r, 180)
        t.forward(l)
      
    # 树函数(递归)
    def tree(d, s):
        if d <= 0:
            return
        t.forward(s)
        tree(d - 1, s * .8)
        t.right(120)
        tree(d - 3, s * .5)
        t.right(120)
        tree(d - 3, s * .5)
        t.right(120)
        t.backward(s)  # 回退函数
     
    # 画爱心部分
    t.penup()
    t.goto(0, 200# 设置起点位置
    t.pendown()
    t.pencolor('red'# 设置画笔颜色
    t.color('red')
    t.begin_fill()  # 对图形进行填充
    loving_heart(20# 执行画爱心函数
    t.end_fill()
     
    # 画树部分
    n = 100
    t.speed(0)
    # t.Turtle().screen.delay(0)
    t.right(225)
    t.color("dark green")
    t.backward(n * 4.8)
    tree(15, n)
    t.backward(n / 5)

    2.落叶效果

    在这里我使用了random函数,通过判断条件控制了两种颜色,大家也可以加入更多的颜色进行绘制落叶:


    1
    2
    3
    4
    if random.randint(1, 2) == 1:
         t.color('tomato')
    else:
         t.color('wheat')

    也可以使其变成不同的形状,也没必要全是圆形,时间问题我就没改,大家感兴趣可以再改一下,也可以使落叶在圣诞树上,不用全在圣诞树下:t.circle(4)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 绘制落叶
    for i in range(200):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.speed(0)
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        if random.randint(1, 2) == 1:
            t.color('tomato')
        else:
            t.color('wheat')
        t.circle(4)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)

    3.雪花特效

    这里我做了很详细的介绍,大家可以参考这个来具体看,还是很好看的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 绘制雪花
    def drawsnow():  # 定义画雪花的方法
        t.speed(0)
        t.ht()  # 隐藏笔头,ht=hideturtle
        t.pensize(2# 定义笔头大小
        for i in range(200):  # 画多少雪花
            t.pencolor("white"# 定义画笔颜色为白色,其实就是雪花为白色
            t.pu()  # 提笔,pu=penup
            t.setx(random.randint(-350, 350))  # 定义x坐标,随机从-350到350之间选择
            t.sety(random.randint(-100, 350))  # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
            t.pd()  # 落笔,pd=pendown
            dens = 6  # 雪花瓣数设为6
            snowsize = random.randint(1, 10# 定义雪花大小
            for j in range(dens):  # 就是6,那就是画5次,也就是一个雪花五角星
                # t.forward(int(snowsize))  #int()取整数
                t.fd(int(snowsize))
                t.backward(int(snowsize))
                # t.bd(int(snowsize))  #注意没有bd=backward,但有fd=forward,小bug
                t.right(int(360 / dens))  # 转动角度
    drawsnow()

    4.背景音乐

    这里使用Pygame模块中的mixer来控制音乐的播放,需要导入本地音乐路径,然后就可以啦!这样会使整个的绘制过程更加浪漫有趣!

    1
    2
    3
    4
    file=r'薛之谦 - 迟迟.mp3'        # 音乐的路径
    pygame.mixer.init()                     # 初始化
    track = pygame.mixer.music.load(file)   # 加载音乐文件
    pygame.mixer.music.play()               # 开始播放音乐

    5.浪漫弹窗

    这里使用了tkinter模块来进行小弹窗的绘制,最后是用for循环来实现弹窗的重复性和随机性,这也是我觉得最大的创新之处吧!惊喜重重,满满心意与浪漫,哈哈哈。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 弹窗制作
    def dow():
        window = tk.Tk()
        width = window.winfo_screenwidth()
        height = window.winfo_screenheight()
        a = random.randrange(0, width)
        b = random.randrange(0, height)
        window.title('圣诞节快乐')
        window.geometry("200x50" + "+" + str(a) + "+" + str(b))
        tk.Label(window,
                 text='圣诞节快乐!'# 标签的文字
                 bg='pink'# 背景颜色
                 font=('..', 17),  # 字体和字体大小
                 width=18, height=2  # 标签长宽
                 ).pack()  # 固定窗口位置
        window.mainloop()
      
    threads = []
    for i in range(100):  # 需要的弹框数量
        t = threading.Thread(target=dow)
        threads.append(t)
        time.sleep(0.01)
        threads[i].start()

    6.署名制作

    最后我又简单的加上了自己的署名,算是对自己产权的一种保护吧。虽然没啥用,你们也肯定会给我去掉,但我不管,这就是一种仪式感嗷!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 写下署名
    t.color("red"# 填充颜色
    t.up()  # 抬笔
    t.goto(170,-200)
    t.down()  # 落笔
    t.write("Created:是Dream呀", font=("宋体", 18, "normal"))
    t.ht()
    # t.done()
    t.hideturtle()

    三、源码分享

    源码来喽: 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    import turtle as t
    import random
    import pygame
    import threading
    import time
    import tkinter as tk
     
    file=r'薛之谦 - 迟迟.mp3'        # 音乐的路径
    pygame.mixer.init()                     # 初始化
    track = pygame.mixer.music.load(file)   # 加载音乐文件
    pygame.mixer.music.play()               # 开始播放音乐
     
    t.screensize(bg='black'# 定义背景颜色,可以自己换颜色
     
    def loving_heart(r):
        l = 2 * r
        t.left(45)
        t.forward(l)
        t.circle(r, 180)
        t.right(90)
        t.circle(r, 180)
        t.forward(l)
      
    # 树函数(递归)
    def tree(d, s):
        if d <= 0:
            return
        t.forward(s)
        tree(d - 1, s * .8)
        t.right(120)
        tree(d - 3, s * .5)
        t.right(120)
        tree(d - 3, s * .5)
        t.right(120)
        t.backward(s)  # 回退函数
      
    # 画爱心部分
    t.penup()
    t.goto(0, 200# 设置起点位置
    t.pendown()
    t.pencolor('red'# 设置画笔颜色
    t.color('red')
    t.begin_fill()  # 对图形进行填充
    loving_heart(20# 执行画爱心函数
    t.end_fill()
     
    # 画树部分
    n = 100
    t.speed(0)
    # t.Turtle().screen.delay(0)
    t.right(225)
    t.color("dark green")
    t.backward(n * 4.8)
    tree(15, n)
    t.backward(n / 5)
     
    # 绘制落叶
    for i in range(200):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.speed(0)
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        if random.randint(1, 2) == 1:
            t.color('tomato')
        else:
            t.color('wheat')
        t.circle(4)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)
    # 绘制雪花
    def drawsnow():  # 定义画雪花的方法
        t.speed(0)
        t.ht()  # 隐藏笔头,ht=hideturtle
        t.pensize(2# 定义笔头大小
        for i in range(200):  # 画多少雪花
            t.pencolor("white"# 定义画笔颜色为白色,其实就是雪花为白色
            t.pu()  # 提笔,pu=penup
            t.setx(random.randint(-350, 350))  # 定义x坐标,随机从-350到350之间选择
            t.sety(random.randint(-100, 350))  # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
            t.pd()  # 落笔,pd=pendown
            dens = 6  # 雪花瓣数设为6
            snowsize = random.randint(1, 10# 定义雪花大小
            for j in range(dens):  # 就是6,那就是画5次,也就是一个雪花五角星
                # t.forward(int(snowsize))  #int()取整数
                t.fd(int(snowsize))
                t.backward(int(snowsize))
                # t.bd(int(snowsize))  #注意没有bd=backward,但有fd=forward,小bug
                t.right(int(360 / dens))  # 转动角度
    drawsnow()
    # 写下署名
    t.color("red"# 填充颜色
    t.up()  # 抬笔
    t.goto(170,-200)
    t.down()  # 落笔
    t.write("Created:是Dream呀", font=("宋体", 18, "normal"))
    t.ht()
    # t.done()
    t.hideturtle()
     
    time.sleep(2)
     
    # 弹窗制作
    def dow():
        window = tk.Tk()
        width = window.winfo_screenwidth()
        height = window.winfo_screenheight()
        a = random.randrange(0, width)
        b = random.randrange(0, height)
        window.title('圣诞节快乐')
        window.geometry("200x50" + "+" + str(a) + "+" + str(b))
        tk.Label(window,
                 text='圣诞节快乐!'# 标签的文字
                 bg='pink'# 背景颜色
                 font=('..', 17),  # 字体和字体大小
                 width=18, height=2  # 标签长宽
                 ).pack()  # 固定窗口位置
        window.mainloop()
      
    threads = []
    for i in range(100):  # 需要的弹框数量
        t = threading.Thread(target=dow)
        threads.append(t)
        time.sleep(0.01)
        threads[i].start()<font face="Arial, Verdana, sans-serif"><span style="white-space: normal;"> </span></font>

    以上就是Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树的详细内容

    原文链接:https://blog.csdn.net/weixin_51390582/article/details/121959033

     伪原创工具 SEO网站优化  https://www.237it.com/ 


    文章分类
    百科问答
    版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
    相关推荐