画一个心送给心爱的小姐姐,Python绘图库Turtle
Python绘图库Turtle
Turtle介绍
Turtle是Python内嵌的绘制线、圆以及其他形状(包括文本)的图形模块。
一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对象,然后,可以调用Turtle对象的各种方法完成不同的操作。
当创建一个Turtle对象时,它的位置被设定在(0,0)处——窗口的中心,而且它的方向被设置为向右。Turtle模块用笔来绘制图形,就像在现实的纸上画图写字。当移动笔的时候就会按着移动方向画线。
海龟图坐标详解
海龟图画图定位采用坐标系,坐标系的(0,0)位置在图纸的中间点。其他的跟我们在数学中学的坐标是一样的,分成四个象限。
如下图所示:
Turtle基础
1. 画布
设置画布大小与背景颜色
方法1:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
参数:分别为画布的宽(单位像素), 高, 背景颜色。
方法2:
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心
2. 画笔
画笔设置:
- 画笔宽度 turtle.pensize(int) 参数是一个整形
- 画笔颜色turtle.pencolor("black") 参数可以是字符串如"green", "red",也可以是RGB 3元组
- 画笔速度 turtle.speed(speed) 设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。
3. 绘图命令
海龟绘图命令可以划分为3种:一种为画笔运动命令,一种为画笔控制命令,还有一种是全局控制命令。
画笔运动命令:
命令 |
说明 |
turtle.forward(distance)/fd() |
向当前画笔方向移动distance像素长度 |
turtle.backward(distance) |
向当前画笔相反方向移动distance像素长度 |
turtle.right(degree) |
顺时针移动degree° |
turtle.left(degree) |
逆时针移动degree° |
turtle.pendown() |
移动时绘制图形,缺省时也为绘制 |
turtle.goto(x,y) |
将画笔移动到坐标为x,y的位置 |
turtle.penup() |
提起笔移动,不绘制图形,用于另起一个地方绘制 |
turtle.circle() |
画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
setx( ) |
将当前x轴移动到指定位置 |
sety( ) |
将当前y轴移动到指定位置 |
setheading(angle)/seth(angle) |
设置当前朝向为angle角度 |
home() |
设置当前画笔位置为原点,朝向东。 |
dot(r) |
绘制一个指定直径和颜色的圆点 |
画笔控制命令:
命令 |
说明 |
turtle.fillcolor(colorstring) |
绘制图形的填充颜色 |
turtle.color(color1, color2) |
同时设置pencolor=color1, fillcolor=color2 |
turtle.filling() |
返回当前是否在填充状态 |
turtle.begin_fill() |
准备开始填充图形 |
turtle.end_fill() |
填充完成 |
turtle.hideturtle() |
隐藏画笔的turtle形状 |
turtle.showturtle() |
显示画笔的turtle形状 |
turtle.begin_poly() |
记录画笔的位置 |
turtle.get_poly() |
获取画笔的位置 |
全局控制命令:
命令 |
说明 |
turtle.clear() |
清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset() |
清空窗口,重置turtle状态为起始状态 |
turtle.undo() |
撤销上一个turtle动作 |
turtle.isvisible() |
返回当前turtle是否可见 |
stamp() |
复制当前图形 |
turtle.write(s ,font=("font-name",font_size,"font_type")]) |
写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项 |
turtle.mainloop() |
绘制完成后不关闭窗口 |
案例:五角星
五角星画法:
五角星每一个内角为36°,假如以海龟所在位置为起点先画一条横线,那么画到第一个角的时候需要拐弯可以使用 turtle.right()顺时针,turtle.left() 逆时针旋转画笔
如果使用顺时针旋转 则180°-36°=144°
如果使用逆时针旋转 则 180°+36°=216°
五个角即循环五次即可
import turtle turtle.pensize(3) # 画笔大小 turtle.pencolor("yellow") # 画笔颜色 turtle.fillcolor("red") # 填充颜色 turtle.begin_fill() # 开始填充 for _ in range(5): # 五角星循环五次 turtle.forward(200) # 五角星的边长200像素 turtle.left(144) # 画笔旋转角度 turtle.end_fill() # 填充完成 turtle.mainloop() # 不关闭窗口
|
案例:爱心
说明:桃心画法
def draw_heart(r, angle=45): |
完整代码查看附件
import turtle
turtle.setup(1200, 600) # 窗口大小
# 画心
turtle.color("black", "red") turtle.pensize(2) turtle.speed(10) turtle.up() # 提起画笔 turtle.goto(0, 50)
turtle.down()
def draw_heart(r, angle=45): """ :param r: 桃心圆的半径 :param angle: 起始画笔角度 :return: 返回桃心底部尖点坐标 """ turtle.begin_fill() # 开始填充 turtle.seth(0) turtle.seth(angle) # 设置画笔方向 turtle.circle(-r, 180) # 逆时针画半圆 turtle.fd(2 * r) # 向前移动 turtle.begin_poly() # 记录画笔的位置 x, y = turtle.get_poly()[0] # 获取画笔的位置 turtle.right(90) # 逆时针旋转画笔 turtle.fd(2 * r) # 向前移动 turtle.circle(-r, 180) turtle.end_fill() # 填充结束 return x, y
# 画桃心 x_y = [] start_x = 0 for _ in range(4): turtle.goto(start_x, 50) turtle.down() # 放下笔 x_y.append(draw_heart(8)) start_x += 50 turtle.up() # 提起画笔
# 画叶子 def draw_flower(x, y): """ 画桃心下的花 :param x: 桃心尖底的x轴 :param y: 桃心尖底的y轴 :return: """ turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢复画笔向右 turtle.seth(-90) turtle.down() turtle.fd(60) turtle.goto(x, y) turtle.right(60) turtle.fd(20) turtle.left(90) turtle.fd(10) turtle.left(120) turtle.fd(20) turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢复画笔向右 turtle.seth(-115) turtle.down() turtle.fd(25) turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢复画笔向右 turtle.seth(-10) turtle.down() turtle.fd(20) turtle.right(90) turtle.fd(8) turtle.right(120) turtle.fd(20) turtle.goto(x, y) turtle.seth(-60) turtle.fd(20) turtle.up()
for x, y in x_y: draw_flower(x, y)
# 画小人物 turtle.up() turtle.goto(-200, -50) turtle.down() turtle.seth(0) # 恢复画笔向右,好控制方向 turtle.seth(45) turtle.fd(40) turtle.begin_poly() # 记录画笔的位置,脚叉的位置 x, y = turtle.get_poly()[0] # 获取画笔的位置 turtle.right(90) turtle.fd(35) turtle.goto(x, y) turtle.left(135) turtle.fd(90) turtle.seth(0) turtle.circle(30) # 画圆 turtle.goto(x, y + 60) # 手的位置 turtle.fd(40) turtle.circle(30, 70) # 画圆,拿花手的弧度 turtle.seth(0) turtle.up() turtle.goto(x, y + 50) # 手的位置 turtle.down() turtle.fd(50) turtle.begin_poly() # 记录手的位置等下画花需要用 f_x, f_y = turtle.get_poly()[0]
# 眼睛 turtle.up() turtle.goto(x - 15, y + 120) # 眼睛的位置 turtle.down() turtle.pensize(4) turtle.seth(45) turtle.circle(-10, 70) # 画圆弧,拿花手的弧度 turtle.dot(10) # 眼睛画圆 turtle.up()
turtle.goto(x + 10, y + 120) # 眼睛的位置 turtle.down() turtle.pensize(4) turtle.seth(45) turtle.circle(-10, 70) # 画圆弧,拿花手的弧度 turtle.dot(10) # 眼睛 画圆 turtle.up()
# 嘴巴 turtle.goto(x, y + 105) # 眼睛的位置 turtle.down() turtle.circle(10, 70) # 画圆弧,拿花手的弧度
# 画里拿的花叶子部分 turtle.pensize(3) # 将画笔大小 turtle.up() turtle.goto(f_x, f_y) # 手的位置 turtle.left(20) turtle.down() turtle.fd(60) turtle.pensize(2) # 将画笔调小 turtle.begin_poly() # 记录手的位置等下画花需要用 x, y = turtle.get_poly()[0] turtle.backward(80) turtle.up() turtle.goto(x, y) turtle.down() turtle.right(90) turtle.fd(20) turtle.right(90) turtle.fd(8) turtle.right(120) turtle.fd(25) turtle.right(200) turtle.fd(25) turtle.up() turtle.goto(x, y) turtle.down() turtle.right(60) turtle.fd(25) turtle.goto(x, y) turtle.right(40) turtle.fd(25) turtle.left(90) turtle.fd(8) turtle.left(110) turtle.fd(25)
turtle.goto(f_x + 34, f_y + 75) draw_heart(8, angle=20) # 手里拿的桃心
# 写文字 turtle.up() turtle.goto(150, 200) turtle.pencolor("PINK") # 画笔颜色 turtle.write("TO: 所有同学", font=("方正舒体", 30, 'normal')) turtle.goto(180,140) turtle.write("送给棒棒的你", font=("方正舒体", 30, 'normal'))
turtle.hideturtle() turtle.mainloop()
|
喜欢Python的同学扫码加我哟!!!!!
画一个心送给心爱的小姐姐,Python绘图库Turtle的更多相关文章
- 用C语言画一个心
用C语言图形库画一个心 --环家伟 这次我教大家用代码画一个心,这样你们就可以送给你们的女(男)朋友了.没找到对象的也可以用来表白啊. 1.首先,我去百度找了心形线的函数,如下: 2. 联系高中的数 ...
- linux 定时任务---给心爱的小姐姐发情书
目录 1.计划任务基本概述 什么是crond? 为什么要用crond? 2.计划任务时间管理 crontab配置文件解析 crontab的时间编写规则 crontab命令选项 3.计划任务编写实践 使 ...
- CSS 画一个心
效果图: 实现原理: 可以把这个心分为两部分,两个长方形,分别设置 border-radius,transform: rotate() . 设置属性之后 再次添加一个,设置相反的 rotate 设置其 ...
- 用python写一个爬虫——爬取性感小姐姐
忍着鼻血写代码 今天写一个简单的网上爬虫,爬取一个叫妹子图的网站里面所有妹子的图片. 然后试着先爬取了三页,大概有七百多张图片吧!各个诱人的很,有兴趣的同学可以一起来爬一下,大佬级程序员勿喷,简单爬虫 ...
- 【Python】画一个心形
#!/usr/bin/env python # -*- coding:utf-8 -*- import turtle import time # 画心形圆弧 def hart_arc(): for i ...
- 用Qt 画一个心形
MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTi ...
- Python——用turtle画一个月饼
今天是中秋节,首先在这里祝大家中秋快乐!那么提到中秋,我们首先想到的当然是香甜的月饼,所以我今天就在这里画一个月饼送给大家. 那么 要用Python画图,我们必须掌握并运用Turtle库,这个可以自己 ...
- python画出心形图
程序员表达爱的方式真是多种多样.比如,用python来画一个心型,献给梦中的情人,代码如下: from turtle import * pensize(1) pencolor('red') fillc ...
- 从零开始学习PYTHON3讲义(十二)画一颗心送给你
(内容需要,本讲使用了大量在线公式,如果因为转帖网站不支持公式无法显示的情况,欢迎访问原始博客.) <从零开始PYTHON3>第十二讲 上一节课我们主要讲解了数值计算和符号计算.数值计算的 ...
随机推荐
- contenteditable 光标定位到最后
在Vue做项目时,做了一个div[contenteditable=true]的组件作为文本输入框 在非手动输入值后,光标会丢失,经测试以下这段代码可用,直接将光标定位到最后 function keep ...
- MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1
1.插入MySQL表时,报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' ...
- 对Serverless的研究
1. 引言 Serverless 是一种 “无服务器架构”,让用户无需关心程序运行环境.资源及数量,只要将精力 Focus 到业务逻辑上的技术. 现在公司已经实现 DevOps 化,正在向 Serve ...
- net core 返回404方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { ...
- 如何修改 tomcat 端口号?
一.tomcat默认端口 tomcat默认的端口是8080,还会占用8005,8009和8443端口.如果已经启动了tomcat,再启动另一个tomcat就会发现 这些端口已经被占用了,这个时候就需要 ...
- html area标签 语法
html area标签 语法 作用:带有可点击区域的图像映射 说明:<img> 中的 usemap 属性可引用 <map> 中的 id 或 name 属性(由浏览器决定),所以 ...
- Codeforces Round #303 (Div. 2) E. Paths and Trees Dijkstra堆优化+贪心(!!!)
E. Paths and Trees time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- luogu P1434 滑雪 x
P1434 滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知 ...
- 【技术分享:python 应用之三】使用 python 修改 excel 表格的 sheet 名称
原始需求:已经下载好了 Excel 文件,但是 Excel 里的 sheet 的名称想要修改一下,比如原本默认的是sheet1,需要修成“DNEWCD_JQJSHMX”.需求比较简单,直接上代码吧! ...
- Cordova-在现有iOS工程自动化接入Cordova插件
模拟Cordova插件命令 自己编写脚本,了解cordova添加插件做了哪些事情. 上一篇文章了解到,web与native的交互主要是cordova.js中的exec方法调用,触发交互事件.UIWeb ...