利用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


猜你喜欢
- 先看一张我绘制的原理图原理图setImmediate 也是宏任务,在 Node 环境下,微任务还有 process.nextTickJS 中
- 本文实例讲述了Python存取XML的常见方法。分享给大家供大家参考,具体如下:目前而言,Python 3.2存取XML有以下四种方法:1.
- 一、InnoDB的表级锁在绝大多数情况下应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别情况下也使用表级锁。事务需要更新大部
- 一、简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性。
- 于是写测试程序。。。不行 下载最新的ODBC。。。还是不行 通过sql plus查询。。。咦?竟然也查不到。。。 于是,折腾。。。折腾。。。
- 简介ORA-10458: standby database requires recoveryORA-01196: 文件 1 由于介质恢复会
- 目录一、慢在哪?二、是否查询了不需要的数据1. 查询不需要的记录2. 多表关联时返回全部列3. 总是查询出全部列4. 重复查询相同的数据三、
- 前言本文主要给大家介绍了关于Golang中数据结构Queue实现的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
- 本文实例讲述了JS 事件机制。分享给大家供大家参考,具体如下:<html> <head>
- 本文讲解如何设置SQL Server数据库全文索引服务。在Microsoft SQL Server 7.0 中提供了全文索引服务(Full-
- 1. 场景大家好,我是J哥。前段时间有人私信我,说自己辛辛苦苦剪辑的短视频,上传到某平台后,由于播放量太大,收到 降权 的通知,直接导致这个
- 详解Python文本操作相关模块linecache——通过使用缓存在内部尝试优化以达到高效从任何文件中读出任何行。 主要方法: lineca
- 前言容器数据类型包括数组list,字典dict以及元组tuple等。本篇,将详细介绍ChainMap字典序列的使用。ChainMapChai
- 我就废话不多说了,直接上代码吧!#coding=utf-8'''openCV中最核心的的类是Mat,他是matrix
- 先看javascript的普通函数用法 function sum(a,b){ var c = 10; function add(){ c++
- 前言本章我们来介绍如何使用Pytorch训练一个区分不同音频的分类模型,例如你有这样一个需求,需要根据不同的鸟叫声识别是什么种类的鸟,这时你
- 一 Protobuf介绍Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标
- 需求背景业务表tb_image部分数据如下所示,其中id唯一,image_no不唯一。image_no表示每个文件的编号,每个文件在业务系统
- 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table
- 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如