python画皮卡丘全身立体_超酷!用 Python 教你绘制皮卡丘和哆啦A梦
本文利用 Python 绘制两个卡通角色,并带大家熟悉一下绘图程序包 turtle 的一些用法,先看一下 最终皮卡丘的绘制效果录制_2020_08_01_22_15_39_710.gif
在使用之前请确保 turtle 已经安装成功,第一次安装 turtle 时,用的是 pip 安装包,但总会出现下面的错误,
经查阅资料找到了一种可行的解决方法:
except ValueError, ve:
改为
except (ValueError, ve):3, 使用 pip 命令对本地下载文件进行安装
pip install C:\Users\XXX\Desktop\turtle-0.0.2
2, turtle 命令介绍
turtle 绘图时有个特点,代码行数看起来比较大,但用到的也就是命令操作,来回使用;这里我提前把 turtle 几个常用的命令罗列出来,并在旁边简单介绍一下其用法,方便大家的学习:ble data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
Func(函数)Para type(参数类型)Desc(描述)
注 : func 中换行表示或的意思,每种函数名有它的缩写,所以存在函数 有2-3 种 不同写法,但函数功能是一样的, - 表示无参数;
3,绘制皮卡丘
代码部分
'''
绘制皮卡丘
'''
import turtle
def getPosition(x,y):
turtle.setx(x)
turtle.sety(y)
print(x,y)
class Pikachu:
def __init__(self):
self.t = turtle.Turtle()
t = self.t
t.pensize(3) # 画笔大小
t.speed(9) #画笔速度
t.ondrag(getPosition)
def onTrace_goto(self,x,y):
self.t.penup()
self.t.goto(x,y)
self.t.pendown()
def leftEye(self,x,y):
self.onTrace_goto(x,y)
t = self.t
t.seth(0)
t.fillcolor('#333333')
t.begin_fill()
t.circle(22)
t.end_fill()
self.onTrace_goto(x,y+10)
t.fillcolor('#000000')
t.begin_fill()
t.circle(10)
t.end_fill()
self.onTrace_goto(x+6,y+22)
t.fillcolor('#ffffff')
t.begin_fill()
t.circle(10)
t.end_fill()
def rightEye(self,x,y):
self.onTrace_goto(x,y)
t = self.t
t.seth(0)
t.fillcolor('#333333')
t.begin_fill()
t.circle(22)
t.end_fill()
self.onTrace_goto(x,y+10)
t.fillcolor('#000000')
t.begin_fill()
t.circle(10)
t.end_fill()
self.onTrace_goto(x-6,y+22)
t.fillcolor('#ffffff')
t.begin_fill()
t.circle(10)
t.end_fill()
def mouth(self,x,y):
self.onTrace_goto(x,y)
t = self.t
t.fillcolor('#88141D')
t.begin_fill()
# 下嘴唇
l1 = []
l2 = []
t.seth(190)
a = 0.7
for i in range(28):
a +=0.1
t.right(3)
t.fd(a)
l1.append(t.position())
self.onTrace_goto(x,y)
t.seth(10)
a = 0.7
for i in range(28):
a +=0.1
t.left(3)
t.fd(a)
l2.append(t.position())
#上嘴唇
t.seth(10)
t.circle(50,15)
t.left(180)
t.circle(-50,15)
t.circle(-50,40)
t.seth(233)
t.circle(-50,55)
t.left(180)
t.circle(50,12.1)
t.end_fill()
# 舌头
self.onTrace_goto(17,54)
t.fillcolor('#DD716F')
t.begin_fill()
t.seth(145)
t.circle(40,86)
t.penup()
for pos in reversed(l1[:20]):
t.goto(pos[0],pos[1]+1.5)
for pos in l2[:20]:
t.goto(pos[0],pos[1]+1.5)
t.pendown()
t.end_fill()
# 鼻子
self.onTrace_goto(-17,94)
t.seth(8)
t.fd(4)
t.back(8)
# 红脸颊
def leftCheck(self,x,y):
turtle.tracer(False)
t = self.t
self.onTrace_goto(x,y)
t.seth(60)
t.fillcolor('#DD4D28')
t.begin_fill()
a = 2.3
for i in range(120):
if 0 <= i <30 or 60 <= i <90:
a -= 0.05
t.lt(3)
t.fd(a)
else:
a += 0.05
t.lt(3)
t.fd(a)
t.end_fill()
turtle.tracer(True)
def rightCheck(self,x,y):
t = self.t
turtle.tracer(False)
self.onTrace_goto(x,y)
t.seth(60)
t.fillcolor('#DD4D28')
t.begin_fill()
a = 2.3
for i in range(120):
if 0<= i<30 or 60 <= i< 90:
a -= 0.05
t.lt(3)
t.fd(a)
else:
a += 0.05
t.lt(3)
t.fd(a)
t.end_fill()
turtle.tracer(True)
def colorLeftEar(self,x,y):
t = self.t
self.onTrace_goto(x,y)
t.fillcolor('#000000')
t.begin_fill()
t.seth(330)
t.circle(100,35)
t.seth(219)
t.circle(-300,19)
t.seth(110)
t.circle(-30,50)
t.circle(-300,10)
t.end_fill()
def colorRightEar(self,x,y):
t = self.t
self.onTrace_goto(x,y)
t.fillcolor('#000000')
t.begin_fill()
t.seth(300)
t.circle(-100,30)
t.seth(35)
t.circle(300,15)
t.circle(30,50)
t.seth(190)
t.circle(300,17)
t.end_fill()
def body(self):
t = self.t
t.fillcolor('#F6D02F')
# 右脸轮廓
t.penup()
t.circle(130,40)
t.pendown()
t.circle(100,105)
t.left(180)
t.circle(-100,5)
# 右耳朵
t.seth(20)
t.circle(300,30)
t.circle(30,50)
t.seth(190)
t.circle(300,36)
# 上轮廓
t.seth(150)
t.circle(150,70)
#左耳朵
t.seth(200)
t.circle(300,40)
t.circle(30,50)
t.seth(20)
t.circle(300,35)
# 左脸轮廓
t.seth(240)
t.circle(105,95)
t.left(180)
t.circle(-105,5)
#左手
t.seth(210)
t.circle(500,18)
t.seth(200)
t.fd(10)
t.seth(280)
t.fd(7)
t.seth(210)
t.seth(300)
t.circle(10,80)
t.seth(220)
t.seth(10)
t.seth(300)
t.circle(10,80)
t.seth(240)
t.fd(12)
t.seth(0)
t.fd(13)
t.seth(240)
t.circle(10,70)
t.seth(10)
t.circle(10,70)
t.seth(10)
t.circle(300,18)
t.seth(75)
t.circle(500,8)
t.left(180)
t.circle(-500,15)
t.seth(250)
t.circle(100,65)
# 左脚
t.seth(320)
t.circle(100,5)
t.left(180)
t.circle(-100,5)
t.seth(220)
t.circle(200,20)
t.circle(20,70)
t.seth(60)
t.circle(-100,20)
t.left(180)
t.circle(100,20)
t.seth(300)
t.circle(10,70)
t.seth(60)
t.circle(-100,20)
t.left(180)
t.circle(100,20)
t.seth(10)
t.circle(100,60)
# 横向
t.seth(180)
t.circle(-100,10)
t.left(180)
t.circle(100,10)
t.seth(5)
t.circle(100,10)
t.circle(-100,40)
t.circle(100,35)
t.left(180)
t.circle(-100,10)
# 右脚
t.seth(290)
t.circle(100,55)
t.circle(10,50)
t.seth(120)
t.circle(100,20)
t.left(180)
t.circle(-100,20)
t.seth(0)
t.circle(10,50)
t.seth(110)
t.circle(110,20)
t.left(180)
t.circle(-100,20)
t.seth(30)
t.circle(20,50)
t.seth(100)
t.circle(100,40)
# 右侧身体轮廓
t.seth(200)
t.circle(-100,5)
t.left(180)
t.circle(100,5)
t.left(30)
t.circle(100,75)
t.right(15)
t.circle(-300,21)
t.left(180)
t.circle(300,3)
# 右手
t.seth(43)
t.circle(200,60)
t.right(10)
t.fd(10)
t.circle(5,160)
t.seth(90)
t.circle(5,160)
t.seth(90)
t.fd(10)
t.seth(90)
t.circle(5,180)
t.fd(10)
t.left(180)
t.left(20)
t.fd(10)
t.circle(5,170)
t.fd(10)
t.seth(240)
t.circle(50,30)
t.end_fill()
self.onTrace_goto(130,125)
t.seth(-20)
t.fd(5)
t.circle(-5,160)
t.fd(5)
# 手指纹
self.onTrace_goto(166,130)
t.seth(-90)
t.fd(3)
t.circle(-4,180)
t.fd(3)
t.seth(-90)
t.fd(3)
t.circle(-4,180)
t.fd(3)
# 尾巴
self.onTrace_goto(168,134)
t.fillcolor('#F6D02F')
t.begin_fill()
t.seth(40)
t.fd(200)
t.seth(-80)
t.fd(150)
t.seth(210)
t.fd(150)
t.left(90)
t.fd(100)
t.right(95)
t.fd(100)
t.left(110)
t.fd(70)
t.right(110)
t.fd(80)
t.left(110)
t.fd(30)
t.right(110)
t.fd(32)
t.right(106)
t.circle(100,25)
t.right(15)
t.circle(-300,2)
t.seth(30)
t.fd(40)
t.left(100)
t.fd(70)
t.right(100)
t.fd(80)
t.left(100)
t.fd(46)
t.seth(66)
t.circle(200,38)
t.right(10)
t.end_fill()
# 尾巴花纹
t.fillcolor('#923E24')
self.onTrace_goto(126.82,-156.84)
t.begin_fill()
t.seth(30)
t.fd(40)
t.left(100)
t.fd(40)
t.pencolor('#923e24')
t.seth(-30)
t.fd(30)
t.left(140)
t.fd(20)
t.left(150)
t.fd(20)
t.right(150)
t.fd(20)
t.left(130)
t.fd(18)
t.pencolor('#000000')
t.seth(-45)
t.fd(67)
t.right(110)
t.fd(30)
t.left(110)
t.fd(32)
t.right(106)
t.circle(100,25)
t.right(15)
t.circle(-300,2)
t.end_fill()
# 帽子、眼睛、嘴巴、脸颊
self.cap(-134.07,147.81)
self.mouth(-5,25)
self.leftCheck(-126,32)
self.rightCheck(107,63)
self.colorLeftEar(-250,100)
self.colorRightEar(150,270)
self.leftEye(-85,90)
self.rightEye(50,110)
t.hideturtle()
def cap(self,x,y):
self.onTrace_goto(x,y)
t = self.t
t.fillcolor('#CD0000')
t.begin_fill()
t.seth(200)
t.circle(400,7)
t.left(180)
t.circle(-400,30)
t.circle(30,60)
t.fd(60)
t.circle(30,45)
t.fd(60)
t.left(5)
t.circle(30,70)
t.right(20)
t.circle(200,70)
t.circle(30,60)
t.fd(70)
t.right(35)
t.fd(50)
t.right(35)
t.fd(50)
t.circle(8,100)
t.end_fill()
self.onTrace_goto(-168.47,185.52)
t.seth(36)
t.circle(-270,54)
t.left(180)
t.circle(270,27)
t.circle(-80,98)
t.fillcolor('#444444')
t.begin_fill()
t.left(180)
t.circle(80,197)
t.left(58)
t.circle(200,45)
t.end_fill()
self.onTrace_goto(-58,270)
t.pencolor('#228B22')
t.dot(35)
self.onTrace_goto(-30,280)
t.fillcolor('#228B22')
t.begin_fill()
t.seth(100)
t.circle(30,180)
t.seth(190)
t.fd(15)
t.seth(100)
t.circle(-45,180)
t.right(90)
t.fd(15)
t.end_fill()
t.fillcolor('#228B22')
def start(self):
self.body()
def main():
print(" Painting the Pikachu....")
turtle.screensize(800,600)
turtle.title("Pickachu")
pickachu = Pikachu()
pickachu.start()
turtle.mainloop() # running
if __name__ =='__main__':
main()
4,绘制 哆啦A梦录制_2020_08_01_22_14_50_40.gif
代码部分
#五轨迹跳跃
def my_goto(x,y):
penup()
goto(x,y)
pendown()
def eyes():
fillcolor('#ffffff')
begin_fill()
tracer(False)
a = 2.5
for i in range(120):
if 0<= i<30 or 60 <= i <90:
a -= 0.05
lt(3)
fd(a)
else:
a += 0.05
lt(3)
fd(a)
tracer(True)
end_fill()
#胡须
def beard():
my_goto(-32,135)
seth(165)
fd(60)
my_goto(-32,125)
seth(180)
fd(60)
my_goto(-32,115)
seth(193)
fd(60)
my_goto(37,135)
seth(15)
fd(60)
my_goto(37,125)
seth(0)
fd(60)
my_goto(37,115)
seth(-13)
fd(60)
#嘴巴
def mouth():
my_goto(5,148)
seth(270)
fd(100)
seth(0)
circle(120,50)
seth(230)
circle(-120,100)
#围巾
def scarf():
fillcolor('#e70010')
begin_fill()
seth(0)
fd(200)
circle(-5,90)
fd(10)
circle(-5,90)
fd(207)
circle(-5,90)
fd(10)
circle(-5,90)
end_fill()
#鼻子
def nose():
my_goto(-10,158)
seth(315)
fillcolor('#e70010')
begin_fill()
circle(20)
end_fill()
#黑眼睛
def black_eyes():
seth(0)
my_goto(-20,195)
fillcolor('#000000')
begin_fill()
circle(13)
end_fill()
pensize(6)
my_goto(20,205)
seth(75)
circle(-10,150)
pensize(3)
my_goto(-17,200)
seth(0)
fillcolor('#ffffff')
begin_fill()
circle(5)
end_fill()
my_goto(0,0)
def face():
fd(183)
lt(45)
fillcolor('#ffffff')
begin_fill()
circle(120,100)
seth(180)
fd(121)
pendown()
seth(215)
circle(120,100)
end_fill()
my_goto(63.56,218.24)
seth(90)
eyes()
seth(180)
penup()
fd(60)
pendown()
seth(90)
eyes()
penup()
seth(180)
fd(64)
def head():
penup()
circle(150,40)
pendown()
fillcolor('#00a0de')
begin_fill()
circle(150,280)
end_fill()
# body
def Doraemon():
head()
scarf()
face()
nose()
mouth()
beard()
my_goto(0,0)
seth(0)
penup()
circle(150,50)
pendown()
seth(30)
fd(40)
seth(70)
circle(-30,270)
fillcolor('#00a0de')
begin_fill()
seth(230)
fd(80)
seth(90)
circle(1000,1)
seth(-89)
circle(-1000,10)
seth(180)
fd(70)
seth(90)
circle(30,180)
seth(180)
fd(70)
seth(100)
circle(-1000,9)
seth(-86)
circle(1000,2)
seth(230)
fd(40)
circle(-30,230)
seth(45)
fd(81)
seth(0)
fd(203)
circle(5,90)
fd(10)
circle(5,90)
fd(7)
seth(40)
circle(150,10)
seth(30)
fd(40)
end_fill()
seth(70)
fillcolor('#ffffff')
begin_fill()
circle(-30)
end_fill()
my_goto(103.74,-182.59)
seth(0)
fillcolor('#ffffff')
begin_fill()
fd(15)
circle(-15,180)
fd(90)
circle(-15,180)
fd(10)
end_fill()
#右手
my_goto(-103.42,15.09)
seth(0)
fd(38)
seth(230)
begin_fill()
circle(90,260)
end_fill()
my_goto(5,-40)
seth(0)
fd(70)
seth(-90)
circle(-70,180)
seth(0)
fd(70)
#铃铛
my_goto(-103.42,15.09)
fd(90)
seth(70)
fillcolor('#ffd200')
begin_fill()
circle(-20)
end_fill()
seth(170)
fillcolor('#ffd200')
begin_fill()
circle(-2,180)
seth(10)
circle(-100,22)
circle(-2,180)
seth(180-10)
circle(100,22)
end_fill()
goto(-13.42,15.09)
seth(250)
circle(20,110)
seth(90)
fd(15)
dot(10)
my_goto(0,-150)
#画眼睛
black_eyes()
if __name__ =='__main__':
screensize(800,600,'#f0f0f0')
pensize(3) # size of pen
speed(9) # speed of pen
Doraemon()
my_goto(100,-300)
write("by zeroing",font = ("Bladley Hand ITC",30,'bold'))
mainloop()
从上面的代码行数应该了解一点, turtle 最难的地方不是它的用法,而是使用者对于整个物体的几何整体塑造,必须全局把握地非常准,否则最终很难绘制出比较满意的图案
感兴趣的同学可以直接把上面代码复制到自己的 IDE 中,直接运行就可以,以上就是本篇文章的所有内容啦,最后感谢大家的阅读!
python画皮卡丘全身立体_超酷!用 Python 教你绘制皮卡丘和哆啦A梦相关推荐
- python做大屏数据可视化_超强大!Python 可视化这款大屏就够了!
对于从事数据领域的小伙伴来说,当需要阐述自己观点.展示项目成果时,我们需要在最短时间内让别人知道你的想法.我相信单调乏味的语言很难让别人快速理解.最直接有效的方式就是将数据进行可视化展现. 提到数据可 ...
- 怎么用python画个电脑_python语言还是java如何用python画爱心
用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...
- 用python画五角星中心颜色不同_画个五角星让它绕中心点旋转
李兴球Python画个五角星绕中心点旋转 画一个五角星让它旋转起来,这在Python中有几个方案可选,这里提供一个不是用自定义形状的方案,以下是部分源代码, 其实关键的代码函数,也就是starpoin ...
- python http服务器_超简单的Python HTTP服务
超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 H ...
- 用python实现视频换脸_超简单使用Python换脸实例
换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...
- python画正方形并涂色_关于python使用cv画矩形并填充颜色同时填充文字
原博文 2017-05-08 12:18 − font = cv2.FONT_HERSHEY_SIMPLEX # 使用默认字体 cv2.rectangle(im, (10, 10), (110, 11 ...
- python画二维温度云图_利用python画出词云图
本文将介绍如何利用python中相应的模块画出词云图.首先给出效果图: 其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高.下面给出具体的步骤. 读取" ...
- python画正方形并涂色_这种图片怎么用python画出来,每一个数字代表一种颜色?...
Python 画正方形,写数字的代码如下: from PIL import Image, ImageDraw, ImageFont, ImageFilter WIDTH = 100 * 4 HEIGH ...
- 用python画六边形并填充颜色_如何用Python,画一个正多边形,长度和颜色还是任意的!...
Python画基本形状,要用到自带的turtle库,这是个简单绘图的入门小工具. 任务设定如上,下面来一点点拆解它. 从键盘获取用户输入的边数. 画笔形状由原来的三角形,改为海龟形状. 长度随机产生, ...
最新文章
- mongoDB设置用户名密码的一个要点
- 网络编程学习笔记(ICMPv6和IPv6套接口选项)
- [Codeforces958F2]Lightsabers (medium)(思维)
- 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?
- ERP系统实施过程问题概览
- Android Studio——[Missing essential plugin: org.jetbrains.android ...]解决方案
- 一个链表创建、反转、打印的C语言代码
- 第十九节:Asp.Net Core WebApi知识总结(一)
- 操作系统学习笔记-2.1.5线程概念和多线程模型
- Android逆向笔记-Unity3D逆向一般思路(静态分析)
- Android使用ksoap2调用C#中的webservice实现图像上传
- 【2017百度之星资格赛】1004.度度熊的午饭时光思路及代码
- JS-记事本(代码)
- vue问题解决 extract:echarts: sill extract echarts@^4.2.0-rc.2 extracted to
- 七年切图仔如何面试大厂web前端?(沟通软技能总结)
- python读取ttf_python读取.ttf字体文件
- 配置java win10_win10 Java14安装及配置
- Android 针对华为手机调用裁剪出现圆形裁剪框的处理
- SQL Developer连接时报错:ORA-12528
- Android 剩余可用时长的计算公式