关注公众号:【小张Python】,为你准备了 50+ 本Python 精品电子书籍 与 50G + 优质视频学习资料,后台回复关键字:1024 即可获取;如果对博文内容有什么疑问,后台添加作者【个人微信】,可与作者直接进行交流

本文利用 Python 绘制两个卡通角色,并带大家熟悉一下绘图程序包 turtle 的一些用法,先看一下 最终皮卡丘的绘制效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-junBrZPX-1600647820051)(C:\Users\13479\Desktop\007wRTdIly1ghbodveyn2g30zk0k0q9x.gif)]

在使用之前请确保 turtle 已经安装成功,第一次安装 turtle 时,用的是 pip 安装包,但总会出现下面的错误,

经查阅资料找到了一种可行的解决方法:

  • 1,从网上下载 turtle 程序包,下载链接为:https://files.pythonhosted.org/packages/ff/f0/21a42e9e424d24bdd0e509d5ed3c7dfb8f47d962d9c044dba903b0b4a26f/turtle-0.0.2.tar.gz

  • 2,解压 1 中的压缩包,修改其中的 setup.py 脚本:修改方法在40行处的 ValueError,ve ;

    except ValueError, ve:
    

    改为

    except (ValueError, ve):
    
  • 3, 使用 pip 命令对本地下载文件进行安装

    pip install C:\Users\XXX\Desktop\turtle-0.0.2
    

2, turtle 命令介绍

turtle 绘图时有个特点,代码行数看起来比较大,但用到的也就是命令操作,来回使用;这里我提前把 turtle 几个常用的命令罗列出来,并在旁边简单介绍一下其用法,方便大家的学习:

Func(函数) Para type(参数类型) Desc(描述)
turtle.screensize(a,b,bg) int;int;colorstring /tuple 创建一个 a*b 大小的画布,bg为背景颜色,为 r,g,b 组成的元组;
turtle.title(name) string 画布窗口名字设为 name
turtle.mainloop() -(表示无参数) 启动事件循环,该语句使用时必须放在最后一句
turtle.Turtle() - RawTurtle()的子类,是画笔的对象,l来设置画笔相关属性
turtle.Turtle().tracer(bool) bool bool = False ,表示绘制开始前调用;bool=True 表示绘制开始后调用
turtle.Turtle().pensize(size) int 把画笔大小设置为 size ;
turtle.Turtle().seth(to_angle)
/turtle.Turtle().sething(to_angle)
float/int turtle 方向角度设为 to_angle
turtle.Turtle().setx(x) int/float 设置 turtle 的横坐标 x, y保持不变
turtle.Turtle().sety(y) int/float 设置 turtle 的纵坐标 y, x保持不变
turtle.Turtle().forward(distance)
turtle.Turtle().fd(distance)
int/float 画笔按原来方向向前移动 distance 个单位
turtle.Turtle().backward(distance)
turtle.Turtle().bk(distance)
turtle.Turtle().back(distance)
int/float 画笔按原来方向向后移动 distance 个单位
turtle.Turtle().left(distance)
turtle.Turtle().lt(distance)
int/float 画笔按原来方向向左移动 distance 个单位
turtle.Turtle().right(distance)
turtle.Turtle().rt(distance)
int/float 画笔按原来方向向右移动 distance 个单位
turtle.Turtle().goto(x,y) float/int,float/int 画笔跳到指定坐标位置(x,y)
turtle.Turtle().circle(radius,extends) int/float,int/float/None 绘制一个指定半径(radius)的圆,圆心根据半径、画笔方向,绘制圆角度三者决定;extends 为绘制的角度(小于360 表示绘制部分圆弧),extend为正值绘制方向为逆时针方向,否则顺时针;
turtle.Turtle().speed(num) int/float 设定画笔绘制速度为 num
turtle.Turtle().penup()
turtle.Turtle().up()
- 抬起画笔,停止绘制
turtle.Turtle().pendown()
turtle.Turtle().down()
- 放下画笔,开始绘制
turtle.Turtle().fillcolor(color) string/tuple/colorname 设置画笔填充颜色 color ,输入格式支持四种:颜色代码字符串(’#000000’),rgb元组((r,g,b)),tk指定颜色字符串(“红色”)
turtle.Turtle().begin_fill() - 调用后开始对绘制的形状填充颜色
turtle.Turtle().end_fill() - 调用后停止填充颜色

: func 中换行表示或的意思,每种函数名有它的缩写,所以存在函数 有2-3 种 不同写法,但函数功能是一样的, - 表示无参数;

… 关于 turtle 相关方法和类还有很多,这里列出来的只是常用的一部分,有兴趣的可以仔细去看一下官网文档,链接为:https://docs.python.org/3.7/library/turtle.html?highlight=screensize#turtle.seth

3,绘制皮卡丘

代码部分

'''
绘制皮卡丘
'''import turtledef getPosition(x,y):turtle.setx(x)turtle.sety(y)print(x,y)class Pikachu:def __init__(self):self.t = turtle.Turtle()t = self.tt.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.tt.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.tt.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.tt.fillcolor('#88141D')t.begin_fill()# 下嘴唇l1 = []l2 = []t.seth(190)a = 0.7for i in range(28):a +=0.1t.right(3)t.fd(a)l1.append(t.position())self.onTrace_goto(x,y)t.seth(10)a = 0.7for i in range(28):a +=0.1t.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.tself.onTrace_goto(x,y)t.seth(60)t.fillcolor('#DD4D28')t.begin_fill()a = 2.3for i in range(120):if 0 <= i <30 or 60 <= i <90:a -= 0.05t.lt(3)t.fd(a)else:a += 0.05t.lt(3)t.fd(a)t.end_fill()turtle.tracer(True)def rightCheck(self,x,y):t = self.tturtle.tracer(False)self.onTrace_goto(x,y)t.seth(60)t.fillcolor('#DD4D28')t.begin_fill()a = 2.3for i in range(120):if 0<= i<30 or 60 <= i< 90:a -= 0.05t.lt(3)t.fd(a)else:a += 0.05t.lt(3)t.fd(a)t.end_fill()turtle.tracer(True)def colorLeftEar(self,x,y):t = self.tself.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.tself.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.tt.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.tt.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() # runningif __name__ =='__main__':main()

4,绘制 哆啦A梦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZvqTRwPI-1600647820056)(C:\Users\13479\Desktop\222.gif)]

代码部分

#五轨迹跳跃
def my_goto(x,y):penup()goto(x,y)pendown()def eyes():fillcolor('#ffffff')begin_fill()tracer(False)a = 2.5for i in range(120):if 0<= i<30 or 60 <= i <90:a -= 0.05lt(3)fd(a)else:a += 0.05lt(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 penspeed(9) # speed of penDoraemon()my_goto(100,-300)write("by zeroing",font = ("Bladley Hand ITC",30,'bold'))mainloop()

从上面的代码行数应该了解一点, turtle 最难的地方不是它的用法,而是使用者对于整个物体的几何整体塑造,必须全局把握地非常准,否则最终很难绘制出比较满意的图案

感兴趣的同学可以直接把上面代码复制到自己的 IDE 中,直接运行就可以,以上就是本篇文章的所有内容啦,最后感谢大家的阅读!

超酷,用 Python 教你绘制皮卡丘和哆啦A梦相关推荐

  1. python画皮卡丘全身立体_超酷!用 Python 教你绘制皮卡丘和哆啦A梦

    本文利用 Python 绘制两个卡通角色,并带大家熟悉一下绘图程序包 turtle 的一些用法,先看一下 最终皮卡丘的绘制效果录制_2020_08_01_22_15_39_710.gif 在使用之前请 ...

  2. 用Python turtle库 绘制皮卡丘

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  3. 教你如何用Canvas绘制整身的哆啦A梦

    教你如何用Canvas绘制整身的哆啦A梦 上牌你文章我们说到了如何使用canvas绘制哆啦A梦,但当时只是绘制了哆啦A梦的头部,之后有学员留言说可不可以教大家绘制整身的哆啦A梦,想了想,决定安排一下. ...

  4. 教你用python画一个可爱皮卡丘!

    听说CSDN里的人都是绘图的好手,那么有种接受挑战嘛,和我一起绘制全网各态皮卡丘! 最近爬虫遇到瓶颈,于是找了几张图皮卡丘的图绘制一下,勉勉强强,还看得的下去,所以滋生了一个绘图比赛,本篇博客讲诉大致 ...

  5. python简单代码画皮卡丘-用python画一只可爱的皮卡丘

    #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): &qu ...

  6. python3绘制皮卡丘

    前两篇博文我们实现了 python3绘制哆啦A梦以及python3绘制小猪佩奇 python3绘制哆啦A梦 python3绘制小猪佩奇 现在我们任然使用python的turtle库来绘制皮卡丘 具体代 ...

  7. python海龟图画皮卡丘_用python画一只皮卡丘

    不知道大家前段儿时间 有没有看电影<大侦探皮卡丘> 点击播放 GIF 0.1M 肯定很多人都已经被 皮卡丘的可爱 迷得神魂颠倒 那么今天 我们就来用python 画一只皮卡丘吧~ 开发工具 ...

  8. python简单代码画皮卡丘-用python画一只可爱的皮卡丘实例

    效果图 #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): ...

  9. python用turtle画皮卡丘_用Python的turtle作画(2)——皮卡丘

    from turtle import * # 绘制皮卡丘头部 # 画脸 def face(x, y): begin_fill() penup() # 将海龟移动到指定的坐标 goto(x, y) pe ...

  10. Python实战之tkinter库画图,用canver画布教你画会动的哆啦A梦

    目录 tkinter库画图基本思路 画虚线 定义画原始人物的函数 点击眨眼 运动四肢 色彩变化 我们知道Python之所以强大,很大一方面都是因为它具有很多强大的第三方库. 而且Python很突出的一 ...

最新文章

  1. enter opportunity line item detail page AG3
  2. 我的2021年终总结:初为人父,从头再来
  3. Java面试10大知识点总结宝典助你通关!已拿意向书!
  4. python中写入csv文件的方法_Python写入CSV文件的方法
  5. 高清动漫壁纸,满足动漫视觉控的你
  6. 截取文件最后10行_软网推荐:向视频文件“开刀”
  7. Django1.6 运行manage.py 报错解决办法(ImportError)
  8. zone watermark水位控制
  9. mysql存储过程输出_MySQL存储过程
  10. war压缩命令_宝塔面板linux版解压WAR文件时,如何解压的三种方法介绍
  11. Disunity_V0.5.0 提取Unity生成的APK资源的后续探索
  12. stl文件用proe怎么打开_stl格式怎么打开
  13. html三因子模型,R语言Fama-French三因子模型实际应用:优化投资组合
  14. vue element-ui 界面有上下两部分table,拉动改变上下区域大小 关键代码
  15. Java TCP实现高仿版QQ聊天(一)
  16. win10 文件图标变白的解决方法
  17. 汇编综合实验--学生管理系统
  18. 计算机语言phal语言,2.7 PhalApi 2.x 国际化
  19. 测试用例(功能用例)——完整demo(一千多条测试用例)
  20. 前端怎么从H5调起微信扫描二维码?小程序使用扫码功能.

热门文章

  1. ECharts 全新大版本 4.0 正式发布!百度数据可视化实验室成立
  2. Windows用户名中文修改英文无感实现操作方法
  3. 电子设计大赛音频信号分析仪
  4. 游戏外挂,其实是一门网络技术
  5. Cameralink协议
  6. 基于CameraLink的串行口通讯
  7. 计算机发展的新用途应用,新时期计算机技术的应用及发展趋势
  8. python课程设计实验报告-python课程设计
  9. GTD时间管理学习心得(2)
  10. 【电子书资源】数值方法最优化理论算法凸优化 ---书籍调研(附网盘下载地址)...