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

作者:是Dream呀 时间:2022-11-20 01:32:46 

一、背景故事

圣诞节风波

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

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

来源:https://blog.csdn.net/weixin_51390582/article/details/121959033

标签:Python,圣诞树
0
投稿

猜你喜欢

  • Python全景系列之模块与包全面解读

    2022-12-09 19:26:48
  • pandas基于时间序列的固定时间间隔求均值的方法

    2022-05-22 11:44:38
  • perl中的范围声明our-my-local介绍

    2022-12-15 02:21:50
  • 从品牌网站看交互设计

    2009-08-18 12:39:00
  • 人性化设计用文字注入情感

    2007-08-22 08:59:00
  • Python异常处理知识点总结

    2023-01-04 16:03:36
  • 如何使数据库的ID字段自动加1?

    2010-06-03 10:47:00
  • Python2.7 实现引入自己写的类方法

    2022-02-25 00:07:44
  • 教你如何使用Python Tkinter库制作记事本

    2023-06-27 21:57:30
  • ASP 错误代码

    2009-05-11 12:38:00
  • Python subprocess模块常见用法分析

    2023-05-22 18:48:44
  • 深入浅析SQL Server 触发器

    2024-01-19 05:23:55
  • 个人从事设计行业40句观感

    2008-04-07 13:58:00
  • 精简版的MySQL制作步骤

    2011-03-08 09:52:00
  • DWCS3-CSS布局之一CSS规则大纲

    2008-06-11 18:48:00
  • 用Python写一个模拟qq聊天小程序的代码实例

    2022-04-01 10:01:42
  • MSSQL 生成日期列表代码

    2024-01-26 23:58:01
  • 使用pandas对两个dataframe进行join的实例

    2022-02-06 11:09:36
  • Python中利用pyqt5制作指针钟表显示实时时间(指针时钟)

    2023-04-30 22:11:13
  • python爬虫爬取幽默笑话网站

    2021-05-31 18:32:58
  • asp之家 网络编程 m.aspxhome.com