python语言turtle库画图代码示例_Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库...

1.

1606232-20190709091034235-1353958544.png

2.

1606232-20190709091117281-558093644.png

1606232-20190709093151845-1870690027.png

3.了解turtle库

Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图。Turtle库是Python语言中一个很流行的绘制图像的函数库。海龟渲染器,和各种三维软件都有着良好的结合。功能强大,使用方便。该渲染器的特色在于其渲染速度可以优海龟渲染器,

和各种三维软件都有着良好的结合。功能强大,使用方便。化得非常快,相比起mental ray来说,这是他的一大优点。尤其是在全局光与final gather联用的时候效果更是明显。海龟渲染器在渲染大场景时非常有效,其对于光线的处理和色彩的鲜艳程度都要更胜三维软件自带的渲染器。其缺点在于对于三维软件的程序纹理贴图的支持不够,很多情况下并不能对它的材质球使用程序纹理贴图,这不能不说是一个遗憾。

1606232-20190709093320684-2039237148.png

1606232-20190709103452417-12792993.png

1606232-20190709093344728-1436108031.png

1606232-20190709093448063-780272365.png

1606232-20190709093556053-1904463078.png

1606232-20190709093632230-495539050.png

1606232-20190709093733688-1877424208.png

1606232-20190709093805427-2136436890.png

1606232-20190709093930738-2002719653.png

1606232-20190709094046965-1350919334.png

1606232-20190709094213428-1477713077.png

1606232-20190709094325874-1126575250.png

1606232-20190709094540372-1547234887.png

1606232-20190709094618673-1185628536.png

1606232-20190709094645079-797632410.png

1606232-20190709094754606-1839896429.png

1606232-20190709094918063-687246235.png

1606232-20190709094931394-1895485438.png

1606232-20190709095116795-1323681097.png

4.编写代码

#pythondraw.py

importturtle #引用 绘制(海龟)库

turtle.setup(650,350,200,200) #启动窗体,宽650,高350

turtle.penup() #抬起画笔

turtle.fd(-250) #倒退250像素

turtle.pendown() #落下画笔

turtle.pensize(25) #画笔宽度是25像素

turtle.pencolor('purple') #画笔颜色是紫色

turtle.seth(-40) #调整方向为绝对40度for i in range(4): #循环4次,走曲线,r为40像素,角度为80

turtle.circle(40,80)

turtle.circle(-40,80)

turtle.circle(40,80/2) #继续走曲线

turtle.fd(40) #向前走40像素

turtle.circle(16,180)

turtle.fd(40 * 2/3)

turtle.done() #结束绘制,不会主动退出;如果想绘图结束就关闭窗口,就去掉这一行

1606232-20190709095550773-1654900483.png

1606232-20190709095636580-1630256279.png

1606232-20190709095818237-383640815.png

推荐使用:

1606232-20190709095931015-2035400096.png

1606232-20190709095947152-2095472249.png

画笔控制函数:

1606232-20190709100158256-1224903837.png

1606232-20190709100305032-962193901.png

1606232-20190709100406481-1073027093.png

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形状

运动控制函数:

1606232-20190709100633586-1633247706.png

1606232-20190709100656446-5311951.png

1606232-20190709100812964-752419451.png

turtle.forward(distance):向当前画笔方向移动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):设置当前朝向为angle角度

home():设置当前画笔位置为原点,朝向东。

dot(r):绘制一个指定直径和颜色的圆点

方向控制函数:

1606232-20190709101019846-1821335438.png

1606232-20190709101039948-1091900806.png

1606232-20190709101111322-919856792.png

循环与range函数:

1606232-20190709101353428-1804461461.png

1606232-20190709101504171-915636144.pngprint里加了逗号,输出时文字与参数会加一个空格

1606232-20190709101651277-1001046061.png

全局控制命令:

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参数也是可选项

其他命令:

1606232-20190709103029948-2016041981.png

网上找的示例:

使用turtle绘制七段数码管,显示当前日期

#SevenDigitsDrawV2.py

importturtle, timedef drawGap(): #绘制数码管间隔

turtle.penup()

turtle.fd(5)def drawLine(draw): #绘制单段数码管

drawGap()

turtle.pendown()if draw elseturtle.penup()

turtle.fd(40)

drawGap()

turtle.right(90)def drawDigit(d): #根据数字绘制七段数码管

drawLine(True) if d in [2,3,4,5,6,8,9] elsedrawLine(False)

drawLine(True)if d in [0,1,3,4,5,6,7,8,9] elsedrawLine(False)

drawLine(True)if d in [0,2,3,5,6,8,9] elsedrawLine(False)

drawLine(True)if d in [0,2,6,8] elsedrawLine(False)

turtle.left(90)

drawLine(True)if d in [0,4,5,6,8,9] elsedrawLine(False)

drawLine(True)if d in [0,2,3,5,6,7,8,9] elsedrawLine(False)

drawLine(True)if d in [0,1,2,3,4,7,8,9] elsedrawLine(False)

turtle.left(180)

turtle.penup()

turtle.fd(20)defdrawDate(date):

turtle.pencolor("red")for i in date: #根据设置的符号分隔年月日

if i == '-':

turtle.write('年',font=("Arial", 18, "normal"))

turtle.pencolor("green")

turtle.fd(40)elif i == '=':

turtle.write('月',font=("Arial", 18, "normal"))

turtle.pencolor("blue")

turtle.fd(40)elif i == '+':

turtle.write('日',font=("Arial", 18, "normal"))else:

drawDigit(eval(i))defmain():

turtle.setup(800, 350, 200, 200) #设置画布窗口大小以及位置

turtle.penup()

turtle.fd(-350)

turtle.pensize(5)

t=time.gmtime() #获取系统当前时间

drawDate(time.strftime('%Y-%m=%d+',t)

turtle.hideturtle()

turtle.done()

main()

画个时钟:

#coding=utf-8

importturtlefrom datetime import *

#抬起画笔,向前运动一段距离放下

defSkip(step):

turtle.penup()

turtle.forward(step)

turtle.pendown()defmkHand(name, length):#注册Turtle形状,建立表针Turtle

turtle.reset()

Skip(-length * 0.1)#开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.begin_poly()

turtle.forward(length* 1.1)#停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.end_poly()#返回最后记录的多边形。

handForm =turtle.get_poly()

turtle.register_shape(name, handForm)defInit():globalsecHand, minHand, hurHand, printer#重置Turtle指向北

turtle.mode("logo")#建立三个表针Turtle并初始化

mkHand("secHand", 135)

mkHand("minHand", 125)

mkHand("hurHand", 90)

secHand=turtle.Turtle()

secHand.shape("secHand")

minHand=turtle.Turtle()

minHand.shape("minHand")

hurHand=turtle.Turtle()

hurHand.shape("hurHand")for hand insecHand, minHand, hurHand:

hand.shapesize(1, 1, 3)

hand.speed(0)#建立输出文字Turtle

printer =turtle.Turtle()#隐藏画笔的turtle形状

printer.hideturtle()

printer.penup()defSetupClock(radius):#建立表的外框

turtle.reset()

turtle.pensize(7)

turtle.pencolor("#ff5500")

turtle.fillcolor("green")for i in range(60):

Skip(radius)if i % 5 ==0:

turtle.forward(20)

Skip(-radius - 20)

Skip(radius+ 20)if i ==0:

turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:

Skip(25)

turtle.write(int(i/ 5), align="center", font=("Courier", 14, "bold"))

Skip(-25)elif (i == 25 or i == 35):

Skip(20)

turtle.write(int(i/ 5), align="center", font=("Courier", 14, "bold"))

Skip(-20)else:

turtle.write(int(i/ 5), align="center", font=("Courier", 14, "bold"))

Skip(-radius - 20)else:

turtle.dot(5)

Skip(-radius)

turtle.right(6)defWeek(t):

week= ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]returnweek[t.weekday()]defDate(t):

y=t.year

m=t.month

d=t.dayreturn "%s-%d-%d" %(y, m, d)defTick():#绘制表针的动态显示

t =datetime.today()

second= t.second + t.microsecond * 0.000001minute= t.minute + second / 60.0hour= t.hour + minute / 60.0secHand.setheading(6 *second)

minHand.setheading(6 *minute)

hurHand.setheading(30 *hour)

turtle.tracer(False)

printer.forward(65)

printer.write(Week(t), align="center",

font=("Courier", 14, "bold"))

printer.back(130)

printer.write(Date(t), align="center",

font=("Courier", 14, "bold"))

printer.home()

turtle.tracer(True)#100ms后继续调用tick

turtle.ontimer(Tick, 100)defmain():#打开/关闭龟动画,并为更新图纸设置延迟。

turtle.tracer(False)

Init()

SetupClock(160)

turtle.tracer(True)

Tick()

turtle.mainloop()if __name__ == "__main__":

main()

1606232-20190709103320194-2051178361.png

1606232-20190709103333948-1614067746.png

绘制小猪佩奇:

1606232-20190709103624031-1318668364.png

#coding:utf-8

importturtle as t#绘制小猪佩奇#=======================================

t.pensize(4)

t.hideturtle()

t.colormode(255)

t.color((255, 155, 192), "pink")

t.setup(840, 500)

t.speed(10)#鼻子

t.pu()

t.goto(-100,100)

t.pd()

t.seth(-30)

t.begin_fill()

a= 0.4

for i in range(120):if 0 <= i < 30 or 60 <= i < 90:

a= a+0.08t.lt(3) #向左转3度

t.fd(a) #向前走a的步长

else:

a= a-0.08t.lt(3)

t.fd(a)

t.end_fill()

t.pu()

t.seth(90)

t.fd(25)

t.seth(0)

t.fd(10)

t.pd()

t.pencolor(255, 155, 192)

t.seth(10)

t.begin_fill()

t.circle(5)

t.color(160, 82, 45)

t.end_fill()

t.pu()

t.seth(0)

t.fd(20)

t.pd()

t.pencolor(255, 155, 192)

t.seth(10)

t.begin_fill()

t.circle(5)

t.color(160, 82, 45)

t.end_fill()#头

t.color((255, 155, 192), "pink")

t.pu()

t.seth(90)

t.fd(41)

t.seth(0)

t.fd(0)

t.pd()

t.begin_fill()

t.seth(180)

t.circle(300, -30)

t.circle(100, -60)

t.circle(80, -100)

t.circle(150, -20)

t.circle(60, -95)

t.seth(161)

t.circle(-300, 15)

t.pu()

t.goto(-100, 100)

t.pd()

t.seth(-30)

a= 0.4

for i in range(60):if 0 <= i < 30 or 60 <= i <90:

a= a+0.08t.lt(3) #向左转3度

t.fd(a) #向前走a的步长

else:

a= a-0.08t.lt(3)

t.fd(a)

t.end_fill()#耳朵

t.color((255, 155, 192), "pink")

t.pu()

t.seth(90)

t.fd(-7)

t.seth(0)

t.fd(70)

t.pd()

t.begin_fill()

t.seth(100)

t.circle(-50, 50)

t.circle(-10, 120)

t.circle(-50, 54)

t.end_fill()

t.pu()

t.seth(90)

t.fd(-12)

t.seth(0)

t.fd(30)

t.pd()

t.begin_fill()

t.seth(100)

t.circle(-50, 50)

t.circle(-10, 120)

t.circle(-50, 56)

t.end_fill()#眼睛

t.color((255, 155, 192), "white")

t.pu()

t.seth(90)

t.fd(-20)

t.seth(0)

t.fd(-95)

t.pd()

t.begin_fill()

t.circle(15)

t.end_fill()

t.color("black")

t.pu()

t.seth(90)

t.fd(12)

t.seth(0)

t.fd(-3)

t.pd()

t.begin_fill()

t.circle(3)

t.end_fill()

t.color((255, 155, 192), "white")

t.pu()

t.seth(90)

t.fd(-25)

t.seth(0)

t.fd(40)

t.pd()

t.begin_fill()

t.circle(15)

t.end_fill()

t.color("black")

t.pu()

t.seth(90)

t.fd(12)

t.seth(0)

t.fd(-3)

t.pd()

t.begin_fill()

t.circle(3)

t.end_fill()#腮

t.color((255, 155, 192))

t.pu()

t.seth(90)

t.fd(-95)

t.seth(0)

t.fd(65)

t.pd()

t.begin_fill()

t.circle(30)

t.end_fill()#嘴

t.color(239, 69, 19)

t.pu()

t.seth(90)

t.fd(15)

t.seth(0)

t.fd(-100)

t.pd()

t.seth(-80)

t.circle(30, 40)

t.circle(40, 80)#身体

t.color("red", (255, 99, 71))

t.pu()

t.seth(90)

t.fd(-20)

t.seth(0)

t.fd(-78)

t.pd()

t.begin_fill()

t.seth(-130)

t.circle(100,10)

t.circle(300,30)

t.seth(0)

t.fd(230)

t.seth(90)

t.circle(300,30)

t.circle(100,3)

t.color((255,155,192),(255,100,100))

t.seth(-135)

t.circle(-80,63)

t.circle(-150,24)

t.end_fill()#手

t.color((255,155,192))

t.pu()

t.seth(90)

t.fd(-40)

t.seth(0)

t.fd(-27)

t.pd()

t.seth(-160)

t.circle(300,15)

t.pu()

t.seth(90)

t.fd(15)

t.seth(0)

t.fd(0)

t.pd()

t.seth(-10)

t.circle(-20,90)

t.pu()

t.seth(90)

t.fd(30)

t.seth(0)

t.fd(237)

t.pd()

t.seth(-20)

t.circle(-300,15)

t.pu()

t.seth(90)

t.fd(20)

t.seth(0)

t.fd(0)

t.pd()

t.seth(-170)

t.circle(20,90)#脚

t.pensize(10)

t.color((240,128,128))

t.pu()

t.seth(90)

t.fd(-75)

t.seth(0)

t.fd(-180)

t.pd()

t.seth(-90)

t.fd(40)

t.seth(-180)

t.color("black")

t.pensize(15)

t.fd(20)

t.pensize(10)

t.color((240, 128, 128))

t.pu()

t.seth(90)

t.fd(40)

t.seth(0)

t.fd(90)

t.pd()

t.seth(-90)

t.fd(40)

t.seth(-180)

t.color("black")

t.pensize(15)

t.fd(20)#尾巴

t.pensize(4)

t.color((255, 155, 192))

t.pu()

t.seth(90)

t.fd(70)

t.seth(0)

t.fd(95)

t.pd()

t.seth(0)

t.circle(70, 20)

t.circle(10, 330)

t.circle(70, 30)

t.done()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值