目录
  • 一、背景故事
  • 二、五合一版圣诞树制作过程
    • 1.基础圣诞树
    • 2.落叶效果
    • 3.雪花特效
    • 4.背景音乐
    • 5.浪漫弹窗
    • 6.署名制作
  • 三、源码分享

    一、背景故事

    圣诞节风波

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

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

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

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

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

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

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

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

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

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

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

    需要用到的模块:

    import turtle as t
    import random
    import pygame
    import threading
    import time
    import tkinter as tk
    

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

    1.基础圣诞树

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

    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函数,通过判断条件控制了两种颜色,大家也可以加入更多的颜色进行绘制落叶:

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

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

    # 绘制落叶
    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.雪花特效

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

    # 绘制雪花
    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来控制音乐的播放,需要导入本地音乐路径,然后就可以啦!这样会使整个的绘制过程更加浪漫有趣!

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

    5.浪漫弹窗

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

    # 弹窗制作
    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.署名制作

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

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

    三、源码分享

    源码来喽: 

    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() 

    以上就是Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树的详细内容,更多关于Python绘制圣诞树的资料请关注其它相关文章!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。