Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗|Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树
目录
- 一、背景故事
- 二、五合一版圣诞树制作过程
- 1.基础圣诞树
- 2.落叶效果
- 3.雪花特效
- 4.背景音乐
- 5.浪漫弹窗
- 6.署名制作
- 三、源码分享
一、背景故事 圣诞节风波
马上不就到圣诞节了嘛,我看到朋友圈里很多小伙伴再纷纷炫耀自己收到的专属圣诞树,也有小伙伴私信我,说还没有自己的圣诞树!!!
文章图片
文章图片
作为我的粉丝朋友们,我不允许大家还没有专属于自己的圣诞树!我要让大家收到最特别最美丽的圣诞树,于是…冒着…期末挂科…的风险…我重拾了自己失传已久的海龟画图: 海龟画图全解-值得你一看!(这篇文章写了很久了,是一些海龟画图最基础的操作,不太了解的小伙伴们可以拿这篇文章来快速入门海龟画图!)
终于…经过…昨天…一个晚上…的艰苦…奋斗,我觉得我又行了!
从最底层开始,我一步一步完善代码设计出了:圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树! 话不多说,先看效果:
文章图片
文章图片
哎嘿嘿,是不是非常的nice呀!看到这先别着急,为了我的期末成绩着想,是不是得先给我来个一键三连呀!!!
接下来让我们慢慢来聊,请大家前排就坐,爆米花自取哟
二、五合一版圣诞树制作过程 需要用到的模块:
import turtle as timport randomimport pygameimport threadingimport timeimport tkinter as tk
这是我们要用到的一些基础库,没有安装的小伙伴们可以安装一下,要求编译器是Python3的环境。
1.基础圣诞树
画主体树的部分看似有些麻烦,但只要你把其中的几个循环看明白了就行了,无非就是几个函数重复控制画笔移动!
t.screensize(bg='black')# 定义背景颜色,可以自己换颜色def loving_heart(r):l = 2 * rt.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:returnt.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 = 100t.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=hideturtlet.pensize(2)# 定义笔头大小for i in range(200):# 画多少雪花t.pencolor("white")# 定义画笔颜色为白色,其实就是雪花为白色t.pu()# 提笔,pu=penupt.setx(random.randint(-350, 350))# 定义x坐标,随机从-350到350之间选择t.sety(random.randint(-100, 350))# 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始t.pd()# 落笔,pd=pendowndens = 6# 雪花瓣数设为6snowsize = 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,小bugt.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 timport randomimport pygameimport threadingimport timeimport tkinter as tkfile=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 * rt.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:returnt.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 = 100t.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=hideturtlet.pensize(2)# 定义笔头大小for i in range(200):# 画多少雪花t.pencolor("white")# 定义画笔颜色为白色,其实就是雪花为白色t.pu()# 提笔,pu=penupt.setx(random.randint(-350, 350))# 定义x坐标,随机从-350到350之间选择t.sety(random.randint(-100, 350))# 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始t.pd()# 落笔,pd=pendowndens = 6# 雪花瓣数设为6snowsize = 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,小bugt.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绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树】以上就是Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树的详细内容,更多关于Python绘制圣诞树的资料请关注脚本之家其它相关文章!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20