今天七夕,还下着雨,刚好想做一个下着爱心雨的特效

准备图片素材

1、美图秀秀找一个爱心图,大小就50*50就可以,生成的是一个png格式文件

2、由于canvas.create_image只支持gif图片,所以在线转换一下,我这里用的是我拉网:http://pic.55.la/

创建画布,画布添加爱心图,图片下落,使用多线程(由于雨要一直下)

Python好难写,调试了半天,话不多说,看看小白初步实现的代码,关键地方加了注释

# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件说明
# __date__:2018/8/17 9:28 from tkinter import *
import random
import threading
import time
import os # 初始雨滴纵坐标
INIT_HEIGHT = 10 # 雨滴创建
def rainmake(canvas,imagefile):
rainlist = []
for i in range(10):
# 根据图片,创建一排心
rainlist.append(canvas.create_image(100 + 80 * i, INIT_HEIGHT, anchor=NE, image=imagefile))
return rainlist # 雨滴下落
def raindown(tk,canvas,imagefile,sec):
#线程间等待
time.sleep(sec)
rainlist = rainmake(canvas,imagefile) # 每颗心的纵坐标值
height = [INIT_HEIGHT] * 10
while True:
# 每次移动前稍等一会
time.sleep(0.2) # 10颗心一起移动
for i in range(10):
# 如果这颗心到底了,则不继续移动,否则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) # 10颗心全到底,则跳出循环
# print(height,height == [0] * 10)
if height == [0] * 10:
print('break:',threading.current_thread().name)
break def lookloop(tk,canvas,thread):
aliveflg = False
while True:
# 5s检测一次
time.sleep(5)
for th in thread:
if th.is_alive():
aliveflg = True
else:
aliveflg = False if aliveflg == False:
break
#Over
canvas.create_text(200,300,text='不好意思,雨停了...',fill='red')
canvas.pack()
time.sleep(5)
tk.destroy() def main():
# 创建窗口对象
tk = Tk()
tk.title('七夕之雨') canvas_style = {
'bg':'white',
'height':'',
'width':'',
'cursor':'circle'
}
# 创建画布
canvas = Canvas(tk,canvas_style)
canvas.pack()
# 图片素材
if not os.path.exists('7777777.gif'):
raise Exception('7777777.gif file does not exists.')
imagefile = PhotoImage(file = "7777777.gif") thread = []
for i in range(10):
thread.append(threading.Thread(target=raindown,args=(tk,canvas,imagefile,i)))
for t in thread:
t.start() # 新开一个线程监控运行中的10个线程
threading.Thread(target=lookloop,args=(tk,canvas,thread)).start() # 进入消息循环
tk.mainloop() if __name__ == '__main__':
main()

动态效果图如下

最重要的一步:发给妹子

(当然要发给妹子,不然做这个干啥)可以打包成exe文件,和素材图片一起发给妹子。。。

PS:此处附上已打包好的文件:链接:https://pan.baidu.com/s/1WBnnkit_k1fojHHnnDeJvw 密码:v8ah

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1ntsxvl0xbssw

今天七夕节,外面下着大雨,用Python的tkinter做一个下爱心雨的特效,发给妹子的更多相关文章

  1. swift 第九课 用tableview 做一个下拉菜单Menu

    写到这里的时候,自己这个项目已经完成了一半左右,项目进度自己还是挺满意.今天又有一个新的布局,要实现个下拉菜单,刚开始写的时候,觉得会很容易,后来发现也是小错不断, 我想自己限制的自己属于写博客的初期 ...

  2. 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>

    Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...

  3. android一个下拉放大库bug的解决过程及思考

    android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...

  4. 这个七夕节,用Python为女友绘制一张爱心照片墙吧!【华为云技术分享】

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群:输入关键字“最新活动”,获取华为云最新特惠促销.华为云诸多技术大咖.特 ...

  5. 七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

    [摘要] Hello大家好,今天就是七夕节了,为了增进和女朋友之间的情感,我写了一个自动生成情诗的AI: 大家可以在ModelArts尝试复现模型,然后快去发给你们的女朋友吧- 大家好,我是b站up主 ...

  6. ITer的七夕节,你的情人在哪里(2015-08-19)

    自写<一个程序猿的生命周期>连载以来,迎来第一个七夕节,打算写篇文章纪念一下.我主张过中国自己的节日的,也不反对过其他国家的节日,但是要搞清楚其他国家节日的由来,不要把别人的鬼节当成我们的 ...

  7. HDOJ 1215 七夕节

    Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...

  8. hdu 1215 七夕节

    Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...

  9. hdu1215七夕节

    Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...

随机推荐

  1. Content-Type与MIME

    http://www.cnblogs.com/jsean/articles/1610265.html 首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF. ...

  2. Ribbon自带负载均衡策略

    IRule这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例. AbstractLoadBalancerRuleAbstractLoadBalancerRule是一 ...

  3. SQL Server 定期归档大表历史数据

    很少有开发会考虑到数据归档的问题已经数据增长的问题,当程序运行一段时间后,就会出现各种问题,部分问题可以修改SQL语句或使用索引来解决,但如果SQL语句无法修改,糟糕的SQL语句无法使用索引,归档历史 ...

  4. read函数和write函数

    read 函数 inline int read() { ,f=; char c=getchar(); ; c=getchar();} +c-'; c=getchar();} return f*x; } ...

  5. 再谈System.BadImageFormatException

    今天,当我们继续学习.NET异常处理系列时,我们将查看System.BadImageFormatException.System.BadImageFormatException与GIF或JPG无关,而 ...

  6. uni-app 事件以及事件绑定

    事件修饰符stop的使用会阻止冒泡,但是同时绑定了一个非冒泡的事件,会导致该元素上的catchEventName失效! prevent可以直接干掉,因为uni-app里没有什么默认事件,比如submi ...

  7. nginx 反向代理之 proxy_cache

    proxy_cache将从C上获取到的数据根据预设规则存放到B上(内存+磁盘)留着备用,A请求B时,B会把缓存的这些数据直接给A,而不需要再去向C去获取. proxy_cache相关功能生效的前提是, ...

  8. 从工厂流水线小妹到Google上班程序媛,看完后,我跪服了!

    阅读本文大概需要 10.2 分钟. 文作者:Ling Sun 原文链接:https://www.zhihu.com/question/68154951/answer/546265013 我家境很不好, ...

  9. pyqt(day2)

    一.安装python 二.安装pyqt5 pip install pyqt5 三.安装pycharm 四.第一个pyqt程序 import sys from PyQt5.QtWidgets impor ...

  10. FileInputFormat 的实现之TextInputFormat

    说明 TextInputFormat默认是按行切分记录record,本篇在于理解,对于同一条记录record,如果被切分在不同的split时是怎么处理的.首先getSplits是在逻辑上划分,并没有物 ...