情人节绘制爱心最合适了,但是单单画一个心形怎么能够满足?今天我们尝试用Python的turtle库画出一整个画布的爱心,让它们在上面动态移动。最终效果如下:

绘制爱心

画爱心有很多种画法,我这里用的方法是用两个圆形和一个正方形组成爱心。而且为了接下来能够实现上百个爱心比较流畅地移动的效果,这里直接用三个画笔组成一个爱心,执行速度会更快。代码如下:

from turtle import *
from math import sqrt
width, height = 800, 600
screen = Screen()     # 创建窗口对象
screen.setup(width, height)    # 设置窗口的宽高
screen.delay(0)    # 设置无延时绘画
screen.bgcolor('pink')     # 设置背景颜色为粉色# 设置画笔的统一属性
t = Turtle(visible=False, shape='circle')
t.shapesize(10, 10)
t.pencolor('red')
t.fillcolor('red')
t.penup()
# 克隆一个圆形,设置位置
circle1 = t.clone()
circle1.goto(-sqrt(10*10*160)/2, 0)
# 克隆第二个圆形,设置位置
circle2 = t.clone()
circle2.goto(sqrt(10*10*160)/2, 0)
# 克隆一个正方形,设置位置并旋转角度
square = t.clone()
square.shape("square")
square.setheading(45)
square.goto(0, -sqrt(10*10*160)/2)
# 显示图形
circle1.showturtle()
circle2.showturtle()
square.showturtle()
done()

效果图如下:

定义爱心类

接着,我们将这种画法的爱心定义为一个类。这样后面要显示多个爱心并调整它们的位置会比较方便。将上面的代码稍作修改,成为下面的代码:

class Heart:def __init__(self, x, y, size):self.size = size    # 心形大小self.speed = size    # 移动速度根据大小变化t = Turtle(visible=False, shape='circle')t.shapesize(size, size)color = (1, 1- size/4, 1-size/4)     # 颜色修改为根据大小变化的粉色t.pencolor(color)t.fillcolor(color)t.penup()self.circle1 = t.clone()self.circle1.goto(x-sqrt(size*size*160)/2, y)self.circle2 = t.clone()self.circle2.goto(x+sqrt(size*size*160)/2, y)self.square = t.clone()self.square.shape("square")self.square.setheading(45)self.square.goto(x, y-sqrt(size * size * 160)/2)self.circle1.showturtle()self.circle2.showturtle()self.square.showturtle()

代码里定义了爱心的移动速度和颜色与大小相关:爱心越大,颜色越深,移动速度越快。这样表现出来的效果会更加丰富。

在主函数里随机生成25个位置和大小不同的爱心,并存入列表:

hearts = []
for i in range(25):heart = Heart(width/2 + randint(1, width), randint(-height/2,height/2), random()*3)hearts.append(heart)

让爱心动起来

在爱心类中定义一个方法(函数)move(),用来让爱心向左移动一个单位速度长度:

    def move(self):self.circle1.setx(self.circle1.xcor()-self.speed)self.square.setx(self.square.xcor() - self.speed)self.circle2.setx(self.circle2.xcor() - self.speed)

然后在主函数里面写一个死循环,让所有爱心重复不断的移动:

while True:for heart in hearts:heart.move()

添加完这两处代码后,爱心就可以动起来了:

让爱心回到起点

此时还有一个问题没处理,爱心从屏幕左侧出去后就没有新的爱心了。其实我们并不需要新的爱心,只需要把从左边出去的爱心再偷偷移动回右侧起点就行。

定义一个将爱心移动到指定位置的方法(函数)moveTo(x, y)

    def moveTo(self, x, y):# 隐藏形状后再移动防止看到移动轨迹self.circle1.hideturtle()self.circle2.hideturtle()self.square.hideturtle()# 移动到指定位置self.circle1.goto(x - sqrt(self.size * self.size * 160) / 2, y)self.circle2.goto(x + sqrt(self.size * self.size * 160) / 2, y)self.square.goto(x, y - sqrt(self.size * self.size * 160) / 2)# 恢复显示self.circle1.showturtle()self.circle2.showturtle()self.square.showturtle()

接着在循环中用 if 语句判断,当爱心位置移动出屏幕左侧时,将其移动到右侧随机位置:

while True:for heart in hearts:heart.move()if heart.square.xcor() < -width / 2:     # 如果爱心移动出屏幕左侧heart.moveTo(width / 2 + randint(1, width), randint(-height / 2, height / 2))   # 回到右侧随机位置

到这里,完整的效果就完成了。不过turtle没法实现全屏效果,爱心只能填满画布,有点可惜。

完整代码

文章内容系原创。如果你觉得这篇文章不错,可以购买完整代码支持我:Python动态满屏心形代码(turtle)

Python使用turtle库绘制动态满屏爱心代码相关推荐

  1. python turtle画熊-Python使用turtle库绘制小猪佩奇(实例代码)

    turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制.turtle图形绘制的概念诞生于1969年,成功应用于LOGO编程语言. turtle库绘制图形有一个基本框架:一个小海龟 ...

  2. python turtle 绘图小猪佩奇,Python使用turtle库绘制小猪佩奇(实例代码)

    这篇文章主要介绍了Python使用turtle库绘制小猪佩奇,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 turtle(海龟)是Python重要的标准库之一,它 ...

  3. python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...

    使用python图形模块turtle库绘制樱花.玫瑰.圣诞树代码实例 发布时间:2020-08-22 15:57:19 来源:脚本之家 阅读:76 作者:Soul fragments 今天为大家介绍几 ...

  4. python画笑脸-python 利用turtle库绘制笑脸和哭脸的例子

    我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...

  5. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程

    用Python的turtle库绘图是很简单的,闲来无事就画了一个玫瑰花,下面奉上源码.... 源码: ''' Created on Nov 18, 2017 @author: QiZhao ''' i ...

  6. python turtle画彩虹-Python利用turtle库绘制彩虹代码示例_天津SEO

    天津SEO RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- f ...

  7. python画图代码彩虹-Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为R ...

  8. Python之Turtle库绘制简单图形

    Python之Turtle库绘制简单图形 来绘制正方形.三角形.五边形.五角形 import turtle #引入turtle库pen=turtle.Turtle() #创建turtle类型的画笔 # ...

  9. python画笑脸图案-python 利用turtle库绘制笑脸和哭脸的例子

    我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...

最新文章

  1. easyexcel根据模板写入_用 Vue+ElementUI 搭建后台管理极简模板
  2. 如何让你的操作系统更安全二
  3. C++文件操作的6种方式
  4. HDU1561:The more, The Better——题解
  5. 数字滤波器(五)--设计IIR滤波器
  6. Selenium WebDriver的工作原理
  7. 【数据库】sql2008卸载和默认实例的删除
  8. android之StorageManager介绍
  9. java html文件转换pdf文件_Java实现HTML转换为PDF的常见方法
  10. 关于华三路由器nat映射ftp端口号登录服务器失败问题
  11. 宠物狗行走手机应用市场现状研究分析-
  12. 安卓的权限大全和动态使用安卓权限
  13. 使用busybox制作rootfs
  14. 大数据有哪些存储方式?
  15. 深度学习入门 (九):卷积层和池化层的实现
  16. JS调用摄像头、实时视频流上传(一次不成功的试验)
  17. IDEA使用手记——IDEA主菜单恢复
  18. OpenWrt之IPTV单线复用详细教程
  19. Ubuntu18.04未发现WiFi适配器解决方案汇总
  20. 荐书 | 睡不着?你需要这本神经漫游指南

热门文章

  1. 【转帖】针尖对麦芒?学林 IHIFI 812 VS QLS QA350 V2
  2. Project Server 2007安装配置过程图解
  3. 怎么把php字幕导入视频,怎么往视频加广告还有字幕 字幕怎么导入视频里|视频字幕制作软件怎么把字幕嵌入视频...
  4. 模电——PN结及其特性2
  5. 论文笔记- AdaDepth: Unsupervised Content Congruent Adaptation for Depth Estimation
  6. 网络安全如何进行培训才有效
  7. 【工业互联网】2018工业互联网红利爆发:政策战略、关键技术、典型案例深度解读!
  8. Python+Vue计算机毕业设计高考志愿推荐系统97d19(源码+程序+LW+部署)
  9. 微信公众号-添加参数获取场景二维码路径
  10. 【51nod】3121 小陶与杠铃片