利用python实现全屏爱心雨向喜欢的人表白
作者:完美,其实并不美 发布时间:2022-05-29 22:32:14
标签:python,全屏,爱心雨
以下核心代码参考黑客帝国的界面的雨滴图和网友的爱心素材
一 音乐播放
def alarm():
# 初始化模
pygame.init()
pygame.mixer.init()
# 加载一个音乐
file = r'C:\Users\95853\PycharmProjects\contanctoracle\.mp3'
pygame.mixer.music.load(file)
pygame.mixer.music.play()
time.sleep(65) # 播放65秒
pygame.mixer.music.stop() # 停止播放
二 爱心创建
def rainmake(canvas, imagefile):
rainlist = []
for i in range(20):
# 根据图片,创建一排心
rainlist.append(canvas.create_image(100 + 80 * i, INIT_HEIGHT, anchor=NE, image=imagefile))
return rainlist
三 爱心下落
ef raindown(tk, canvas, imagefile, sec):
# 线程间等待
time.sleep(sec)
rainlist = rainmake(canvas, imagefile)
# 每颗心的纵坐标值
height = [INIT_HEIGHT] * 20
while True:
# 每次移动前稍等一会
time.sleep(0.2)
# 20颗心一起移动
for i in range(20):
# 如果这颗心到底了,则不继续移动,否则height重置就无效了
if not height[i] == 0:
# 设置下落步调
rnd = random.randint(5, 50)
canvas.move(rainlist[i], 0, rnd)
height[i] = height[i] + rnd
tk.update()
for i, h in enumerate(height):
if h > 600:
# 当这颗心走到最下方,则删除
canvas.delete(rainlist[i])
tk.update()
# 清空这颗心的height
height[i] = 0
print(i, h, height)
# 20颗心全到底,则跳出循环
if height == [0] * 20:
print('break:', threading.current_thread().name)
break
四 展示表白语
def lookloop(tk, canvas, thread):
aliveflg = False
alarm()
while True:
# 5s检测一次
time.sleep(5)
for th in thread:
if th.is_alive():
aliveflg = True
else:
aliveflg = False
if aliveflg == False:
break
# Over
text = '雨停了,But.I Love You Too...'
# canvas.font = "bold 4000px Arial"
canvas.create_text(1050, 450, text=text, fill='red', anchor='e', font=('宋体', 40,))
canvas.pack()
time.sleep(10)
tk.destroy()
五 主函数创建窗口对象和开启多线程
def main():
# 创建窗口对象
tk = Tk()
tk.title('爱心之雨')
canvas_style = {
'bg': 'white',
'height': '1000',
'width': '1400',
'cursor': 'circle'
}
# 创建画布
canvas = Canvas(tk, canvas_style)
canvas.pack()
imagefile = PhotoImage(file="7777777.gif")
thread = []
for i in range(60):#60
thread.append(threading.Thread(target=raindown, args=(tk, canvas, imagefile, i)))
for t in thread:
t.start()
# 新开一个线程监控运行中的60个线程
threading.Thread(target=lookloop, args=(tk, canvas, thread)).start()
效果如下图:
动态爱心下落时,播放音乐,播完后展示一句表白话。
总结
来源:https://huaweicloud.csdn.net/63802f81dacf622b8df865ab.html
0
投稿
猜你喜欢
- 如何制作一个股票滚屏显示面板?<html> <head> <script
- Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处。虽然其他
- 今天的问题是请问以下 alert 弹出值分别是什么?var f = function f2()&nb
- pandas中iloc()函数DataFrame.iloc纯基于整数位置的索引。import pandas as pdmydict = [{
- mint19.2 本来pip 和 pip2 对应 python2.7 pip3对应pytho
- 1. 欧几里德算法欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:定理: gcd(a, b)
- 如下所示:import re# 过滤不了\\ \ 中文()还有————r1 = u'[a-zA-Z0-9'!"#$
- maketrans()方法返回的字符串intab每个字符映射到字符的字符串outtab相同位置的转换表。然后这个表被传递到tra
- 在CSS初级教程中我们仅仅考虑了HTML选择符──以HTML标签形式出现。你当然可以用类选择符class和标识选择符id来定义自己的选择符。
- 一段时间以来,发现有很多人XHTML都不会用,不光是普通的初学者,有的程序员都不是很清楚该怎么写这个XHTML,我这里呢算是把一些常见的应用
- 由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好
- 你好,一般情况下,Ctrl+C 是最简单的方法,当无法 Ctrl+C 时,我们借助于 Python,以下是具体步骤:第一步,安装工具库1、t
- 上篇文章讲了js中的传值和传址 和 函数的作用域.这章我们来探讨js中的变量,表达式,和运算符 还有一些 js 语句。升级中……1, 表达式
- Python矩阵的基本用法mat()函数将目标数据的类型转化成矩阵(matrix)1,mat()函数和array()函数的区别Numpy函数
- 投资有风险,选择需谨慎。 股票交易数据分析可直观股市走向,对于如何把握股票行情,快速解读股票交易数据有不可替代的作用!1 数据预处
- 当很多人发现在DW4中定义CSS很方便的时候,开始报怨FP2000不能定义CSS,甚至就此抨击FP2000如何的不好。事实上,在FP2000
- 一、事件捕捉(Event Capture)的实现问题首先在说这件事前,先感谢一下Realazy。 W3C DOM Level2的事
- IIS上设置301 跳转相信大家都会,只要在网站-属性-主目录里 选择重定向URL就行了,这样整站就跳转到目标站点了,但是有个问
- SQL Server导出表到EXCEL文件的存储过程:*--数据导出EXCEL导出表中的数据到Excel,包含字段名,文件为真正的Excel
- 现在正在搞三层开发,用ASP和VB6.0,但是现在苦于没有找到合适的方法来调试自己写的DLL文件,效率相当低。 &n