写点什么

还没有表白神器?情人节来喽,快为心爱的她送上一份专属的礼物吧~

作者:是Dream呀
  • 2022 年 2 月 15 日
  • 本文字数:7719 字

    阅读完需:约 25 分钟

还没有表白神器?情人节来喽,快为心爱的她送上一份专属的礼物吧~

📢📢📢📣📣📣🌻🌻🌻Hello,大家好我叫是 Dream 呀,一个有趣的 Python 博主,多多关照😜😜😜🏅🏅🏅2021 年度博客之星 TOP100,2021 年度博客之星领域 TOP5,Python 领域优质创作者,欢迎大家找我合作学习(文末有 VX 想进学习交流群 or 学习资料 欢迎+++)💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺🍉🍉🍉“一万次悲伤,依然会有 Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈🌟🌟🌟✨✨✨


前言:一转眼,又是一年情人节,今年你是否还是一个人呢?


if 不是:  祝福你们,看下去,看完感情牢固  print('成功进入好男人关卡')elif 是:  抱抱铁子,看下去,看完脱单  print('成功进入海王关卡')
复制代码

一、背景故事👻👻👻

情人节其前夕,又有许多小伙伴们纷纷私信 Dream,能不能帮忙脱一下单啊,出一期表白神器!更有许多小伙伴因为去年用过这个: python跨年表白神器--你值得拥有!今年更是成功加入海王行列,纷纷来感谢 Dream,问我是否还有别的好东西。 一个资深老海王的自述(不是):好东西是有的!还有很多!于是冒着情人节不和女朋友一起过的风险,Dream 连夜赶制最新表白神器。应广大朋友们的需求它来喽:情人节专属礼物,快送给最心爱的她吧~话不多说先看效果:






🌈🌈🌈哎嘿嘿,是不是非常的 nice 呀!看到这先别着急,为了我的情人节着想,是不是得先给我来个一键三连呀!!!



接下来让我们慢慢来聊,请大家前排就坐,爆米花自取哟(点赞+收藏相当于一份爆米花😜😜😜)

二、制作过程

1.交互界面

这里使用定义了 clear_screen()函数来实现对每一次动画的清屏,有利于下一次动画的展示。全局运用了 turtle 库、time 时间库、random 随机库,以及 tkinter 库和 threading 库安装方法:cmd 之后直接 pip install turtle(所需要的库的名称)


# 实现清屏def clear_screen():    turtle.penup()             #画笔抬起    turtle.goto(0,0)        #定位到(0,0)    turtle.color('white')    turtle.pensize(800)         #画笔粗细    turtle.pendown()           #画笔落下    turtle.setheading(0)        #设置朝向    turtle.fd(300)       #前进    turtle.bk(600)      #后退
# 初始化海龟的位置def go_start(x, y, state): turtle.pendown() if state else turtle.penup() turtle.goto(x, y)
#画线,state为真时海龟回到原点,为假时不回到原来的出发点def draw_line(length, angle, state): turtle.pensize(1) turtle.pendown() turtle.setheading(angle) turtle.fd(length) turtle.bk(length) if state else turtle.penup() turtle.penup()
复制代码

2.绘制发射爱心的小人

这里是海龟画图的一些操作:


# 画出发射爱心的小人def draw_people(x, y):    turtle.speed(0)    turtle.penup()    turtle.goto(x, y)    turtle.pendown()    turtle.pensize(2)    turtle.color('black')    turtle.setheading(0)    turtle.circle(35, 360)    turtle.penup()    turtle.pensize(3)    turtle.setheading(90)    turtle.fd(45)    turtle.setheading(180)    turtle.fd(20)    turtle.setheading(0)    turtle.fd(35)    turtle.pendown()    turtle.circle(4, 360)    turtle.penup()    turtle.goto(x, y)    turtle.pensize(2)    turtle.setheading(0)    turtle.fd(20)    turtle.setheading(90)    turtle.fd(20)    turtle.setheading(-90)    turtle.pendown()    turtle.circle(5, 180)    turtle.penup()    turtle.goto(x, y)    turtle.setheading(-90)    turtle.pendown()    turtle.fd(20)    turtle.setheading(0)    turtle.fd(35)    turtle.setheading(60)    turtle.fd(10)    turtle.penup()    turtle.goto(x, y)    turtle.setheading(-90)    turtle.pendown()    turtle.fd(40)    turtle.setheading(0)    turtle.fd(35)    turtle.setheading(-60)    turtle.fd(10)    turtle.penup()    turtle.goto(x, y)    turtle.setheading(-90)    turtle.pendown()    turtle.fd(60)    turtle.setheading(-135)    turtle.fd(60)    turtle.bk(60)    turtle.setheading(-45)    turtle.fd(30)    turtle.setheading(-135)    turtle.fd(35)    turtle.penup()
复制代码

3.绘制一箭穿心

这里面的文字都是可以根据自己需要进行修改的,大家按自己的需求来改就可以啦!


# 画爱心def draw_heart(size):    turtle.color('red', 'pink')    turtle.pensize(2)    turtle.pendown()    turtle.setheading(150)    turtle.begin_fill()    turtle.fd(size)    turtle.circle(size * -3.745, 45)    turtle.circle(size * -1.431, 165)    turtle.left(120)    turtle.circle(size * -1.431, 165)    turtle.circle(size * -3.745, 45)    turtle.fd(size)    turtle.end_fill()    turtle.speed(0)
# 画箭羽def draw_feather(size): angle = 30 # 箭的倾角 feather_num = size // 6 # 羽毛的数量 feather_length = size // 3 # 羽毛的长度 feather_gap = size // 10 # 羽毛的间隔 for i in range(feather_num): draw_line(feather_gap, angle + 180, False) # 箭柄,不折返 draw_line(feather_length, angle + 145, True) # 羽翼,要折返 draw_line(feather_length, angle + 145, False) draw_line(feather_num * feather_gap, angle, False) draw_line(feather_length, angle + 145 + 180, False) for i in range(feather_num): draw_line(feather_gap, angle + 180, False) # 箭柄,不折返 draw_line(feather_length, angle - 145, True) # 羽翼,要折返 draw_line(feather_length, angle - 145, False) draw_line(feather_num * feather_gap, angle, False) draw_line(feather_length, angle - 145 + 180, False)
# 画一箭穿心,最后箭的头没有画出来,用海龟来代替def arrow_heart(x, y, size): go_start(x, y, False) draw_heart(size * 1.15) turtle.setheading(-150) turtle.penup() turtle.fd(size * 2.2) draw_heart(size) turtle.penup() turtle.setheading(150) turtle.fd(size * 2.2) turtle.color('black') draw_feather(size) turtle.pensize(4) turtle.setheading(30) turtle.pendown() turtle.fd(size * 2) turtle.penup() turtle.setheading(29) turtle.fd(size * 5.7) turtle.color('black') turtle.pensize(4) turtle.pendown() turtle.fd(size * 1.2)
#显示倒数3,2,1def draw_0(i): turtle.speed(0) turtle.penup() turtle.hideturtle() # 隐藏箭头显示 turtle.goto(-50, -100) turtle.color('red') write = turtle.write(i, font=('宋体', 200, 'normal')) time.sleep(1)
# 显示文字def draw_1(): turtle.penup() turtle.hideturtle() #隐藏箭头显示 turtle.goto(-450, 0) turtle.color('red') write = turtle.write('宝贝,情人节快乐💕💕💕', font=('宋体', 60, 'normal')) time.sleep(2)
# 显示发射爱心的小人儿def draw_2(): turtle.speed(3) draw_people(-250, 20) turtle.penup() turtle.goto(-150, -30) draw_heart(14) turtle.penup() turtle.goto(-20, -60) draw_heart(25) turtle.penup() turtle.goto(205, -100) draw_heart(43) turtle.hideturtle() time.sleep(2)
def draw_3(): turtle.penup() turtle.hideturtle() # 隐藏箭头显示 turtle.goto(-220, 50) turtle.color('red') write = turtle.write('💕宝贝', font=('宋体', 60, 'normal')) turtle.penup() turtle.goto(0, -50) write = turtle.write('宝贝💕', font=('宋体', 60, 'normal')) time.sleep(2)

# 显示一箭穿心def draw_4(): turtle.speed(1) turtle.penup() turtle.goto(-410, -200) turtle.color('pink') turtle.pendown() turtle.write('猫咪公主 狗王', font=('wisdom', 60, 'normal')) turtle.speed(1) turtle.penup() turtle.color("red") turtle.goto(-31, -220) turtle.write('❤',font=('wisdom', 80, 'normal')) arrow_heart(20, -60, 51) turtle.showturtle()
复制代码

4.浪漫弹窗绘制

这里使用了 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()


number=[3,2,1] #储存显示界面倒数数字1,2,3
if __name__ == '__main__': turtle.setup(900, 500) #调画布的尺寸 for i in number: draw_0(i) clear_screen() draw_1() clear_screen() draw_2() clear_screen() draw_3() clear_screen() draw_4() time.sleep(5) # 弹窗设置 threads = [] for i in range(200): # 需要的弹框数量 t = threading.Thread(target=dow) threads.append(t) time.sleep(0.01) threads[i].start()
复制代码

三、源码分享

源码来喽:


# Time    : 2022/2/14 12:21# File    : 情人节.py# Author  : 是Dream呀!# VX      : Xu18300396393# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!import turtleimport timeimport randomimport tkinter as tkimport threading
# 实现清屏def clear_screen(): turtle.penup() #画笔抬起 turtle.goto(0,0) #定位到(0,0) turtle.color('white') turtle.pensize(800) #画笔粗细 turtle.pendown() #画笔落下 turtle.setheading(0) #设置朝向 turtle.fd(300) #前进 turtle.bk(600) #后退
# 初始化海龟的位置def go_start(x, y, state): turtle.pendown() if state else turtle.penup() turtle.goto(x, y)
#画线,state为真时海龟回到原点,为假时不回到原来的出发点def draw_line(length, angle, state): turtle.pensize(1) turtle.pendown() turtle.setheading(angle) turtle.fd(length) turtle.bk(length) if state else turtle.penup() turtle.penup()
# 画出发射爱心的小人def draw_people(x, y): turtle.speed(0) turtle.penup() turtle.goto(x, y) turtle.pendown() turtle.pensize(2) turtle.color('black') turtle.setheading(0) turtle.circle(35, 360) turtle.penup() turtle.pensize(3) turtle.setheading(90) turtle.fd(45) turtle.setheading(180) turtle.fd(20) turtle.setheading(0) turtle.fd(35) turtle.pendown() turtle.circle(4, 360) turtle.penup() turtle.goto(x, y) turtle.pensize(2) turtle.setheading(0) turtle.fd(20) turtle.setheading(90) turtle.fd(20) turtle.setheading(-90) turtle.pendown() turtle.circle(5, 180) turtle.penup() turtle.goto(x, y) turtle.setheading(-90) turtle.pendown() turtle.fd(20) turtle.setheading(0) turtle.fd(35) turtle.setheading(60) turtle.fd(10) turtle.penup() turtle.goto(x, y) turtle.setheading(-90) turtle.pendown() turtle.fd(40) turtle.setheading(0) turtle.fd(35) turtle.setheading(-60) turtle.fd(10) turtle.penup() turtle.goto(x, y) turtle.setheading(-90) turtle.pendown() turtle.fd(60) turtle.setheading(-135) turtle.fd(60) turtle.bk(60) turtle.setheading(-45) turtle.fd(30) turtle.setheading(-135) turtle.fd(35) turtle.penup()

# 画爱心def draw_heart(size): turtle.color('red', 'pink') turtle.pensize(2) turtle.pendown() turtle.setheading(150) turtle.begin_fill() turtle.fd(size) turtle.circle(size * -3.745, 45) turtle.circle(size * -1.431, 165) turtle.left(120) turtle.circle(size * -1.431, 165) turtle.circle(size * -3.745, 45) turtle.fd(size) turtle.end_fill() turtle.speed(0)
# 画箭羽def draw_feather(size): angle = 30 # 箭的倾角 feather_num = size // 6 # 羽毛的数量 feather_length = size // 3 # 羽毛的长度 feather_gap = size // 10 # 羽毛的间隔 for i in range(feather_num): draw_line(feather_gap, angle + 180, False) # 箭柄,不折返 draw_line(feather_length, angle + 145, True) # 羽翼,要折返 draw_line(feather_length, angle + 145, False) draw_line(feather_num * feather_gap, angle, False) draw_line(feather_length, angle + 145 + 180, False) for i in range(feather_num): draw_line(feather_gap, angle + 180, False) # 箭柄,不折返 draw_line(feather_length, angle - 145, True) # 羽翼,要折返 draw_line(feather_length, angle - 145, False) draw_line(feather_num * feather_gap, angle, False) draw_line(feather_length, angle - 145 + 180, False)
# 画一箭穿心,最后箭的头没有画出来,用海龟来代替def arrow_heart(x, y, size): go_start(x, y, False) draw_heart(size * 1.15) turtle.setheading(-150) turtle.penup() turtle.fd(size * 2.2) draw_heart(size) turtle.penup() turtle.setheading(150) turtle.fd(size * 2.2) turtle.color('black') draw_feather(size) turtle.pensize(4) turtle.setheading(30) turtle.pendown() turtle.fd(size * 2) turtle.penup() turtle.setheading(29) turtle.fd(size * 5.7) turtle.color('black') turtle.pensize(4) turtle.pendown() turtle.fd(size * 1.2)
#显示倒数3,2,1def draw_0(i): turtle.speed(0) turtle.penup() turtle.hideturtle() # 隐藏箭头显示 turtle.goto(-50, -100) turtle.color('red') write = turtle.write(i, font=('宋体', 200, 'normal')) time.sleep(1)
# 显示文字def draw_1(): turtle.penup() turtle.hideturtle() #隐藏箭头显示 turtle.goto(-450, 0) turtle.color('red') write = turtle.write('宝贝,情人节快乐💕💕💕', font=('宋体', 60, 'normal')) time.sleep(2)
# 显示发射爱心的小人儿def draw_2(): turtle.speed(3) draw_people(-250, 20) turtle.penup() turtle.goto(-150, -30) draw_heart(14) turtle.penup() turtle.goto(-20, -60) draw_heart(25) turtle.penup() turtle.goto(205, -100) draw_heart(43) turtle.hideturtle() time.sleep(2)
def draw_3(): turtle.penup() turtle.hideturtle() # 隐藏箭头显示 turtle.goto(-220, 50) turtle.color('red') write = turtle.write('💕宝贝', font=('宋体', 60, 'normal')) turtle.penup() turtle.goto(0, -50) write = turtle.write('宝贝💕', font=('宋体', 60, 'normal')) time.sleep(2)

# 显示一箭穿心def draw_4(): turtle.speed(1) turtle.penup() turtle.goto(-410, -200) turtle.color('pink') turtle.pendown() turtle.write('猫咪公主 狗王', font=('wisdom', 60, 'normal')) turtle.speed(1) turtle.penup() turtle.color("red") turtle.goto(-31, -220) turtle.write('❤',font=('wisdom', 80, 'normal')) arrow_heart(20, -60, 51) turtle.showturtle()

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


number=[3,2,1] #储存显示界面倒数数字1,2,3
if __name__ == '__main__': turtle.setup(900, 500) #调画布的尺寸 for i in number: draw_0(i) clear_screen() draw_1() clear_screen() draw_2() clear_screen() draw_3() clear_screen() draw_4() time.sleep(5) # 弹窗设置 threads = [] for i in range(200): # 需要的弹框数量 t = threading.Thread(target=dow) threads.append(t) time.sleep(0.01) threads[i].start()
复制代码

四、🎄美好祝愿🎄

希望大家在情人节都可以和喜欢的人在一起,送上那棵专属于她 or 他的专属礼物!天天开心,好好生活,我一直都在哟~💘💘💘(有任何问题的话,欢迎评论区或者私信我嗷,我都会看的!)

五、原工程文件分享

如果你实在是不懂 Python,那就直接下载这个压缩包就可以把,一键运行即可,需要自取:情人节表白神器exe文件+直接运行就可以

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~




用户头像

是Dream呀

关注

Python领域优质创作者 2021.03.30 加入

2021年度博客之星TOP100,2021年度领域TOP5 Python领域优质创作者,交流、合作、学习,欢迎私信我VX+++ 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!

评论

发布
暂无评论
还没有表白神器?情人节来喽,快为心爱的她送上一份专属的礼物吧~