龙空技术网

会画画的海龟,Python Turtle库详解(27)

和猫妹学Python 267

前言:

现在咱们对“pythonturtle库seth”都比较着重,大家都想要学习一些“pythonturtle库seth”的相关文章。那么小编同时在网上网罗了一些关于“pythonturtle库seth””的相关知识,希望咱们能喜欢,你们快快来了解一下吧!

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

欢迎和猫妹一起,趣味学Python。

今日主题

介绍下Python的turtle库,这是一个可以画画的库,非常适合小孩子在屏幕上画画。

先学习基础知识,后面分享几个有趣的程序。

LOGO语言

LOGO语言“logo”一词源于希腊文,原意为“文字”或“思考”、“想法”。

是一种过程性语言,是在1967年由美国麻省理工学院(MIT)佩帕特(Seymour Papert)教授指导下的一个研究小组在LISP语言基础上,专门为儿童研制开发的编程语言。

Logo语言虽然结构简单、却有丰富的表达方式,体现了现代计算机科学许多最新概念。

在LOGO的世界里,人们可以通过编程输入指令,让小海龟在画面上走动,向左右上下,或者按照设定的角度移动,或者重复做某一件事情。

简单的绘图指令,加上判断、循环等程序设计方法,可以绘制出美丽的图案,比如人物、动物、植物、抽象画等等。

turtle库

Python内置了turtle库,借鉴了LOGO语言海龟画图的所有绘图功能。

画布(canvas)

所谓画布,就是将这些东西都存放在一个位置进行设定,方便展开绘画的区域。

常见的方式有两种:

turtle.screensize(canvwidth=None, canvheight=None, bg=None)

三个参数,分别是设置画布的宽、高及背景样式的操作,在使用的时候,宽的单位为像素

比如:

turtle.screensize(600, 400, "green")

turtle.screensize() #返回默认大小(400, 300)

turtle.setup(width=0.5, height=0.75, startx=None, starty=None)

前面两个参数是设置画布的宽和高的,当它们为整数的时候表示的是像素,如果是小数就表示当前使用电脑的屏幕比例。

后面两个参数设置的是矩形窗口顶点的位置,当值为空时,默认窗口会在屏幕的中间出现。

比如:

turtle.setup(width=0.6, height=0.6)

turtle.setup(width=800, height=800, startx=100, starty=100)

绘图屏幕坐标系

画笔

turtle.shape("turtle")可指定画笔的形状

classic,arrow,tutle(缺省默认值),circle,square,triangle

turtle.pensize():设置画笔的宽度。

turtle.speed():画笔的移动速度,范围为0到无穷大。

turtle.pencolor():设置获取画笔颜色。

绘图控制

向前移动:tutle.forward(distance),tutle.fd(distance)

向后移动:tutle.backward(distance),tutle.bk(distance)

向左旋转:tutle.left(angle),tutle.lt(angle)

向右旋转:tutle.right(angle),tutle.rt(angle)

向左旋转角度:tutle.seth(angle)

画笔运动命令

tutle.forward(distance),tutle.fd(distance)

tutle.backward(distance),tutle.bk(distance)

tutle.left(angle),tutle.lt(angle)

tutle.right(angle),tutle.rt(angle)

tutle.pendown(),pd(),down():画笔落下,移动时绘制图形,缺省值

tutle.goto(x,y):画笔移动到(x,y)

tutle.penup(),pu(),up():画笔抬起,移动时不绘制图形

tutle.setx():将当前x轴移动到指定位

tutle.sety():将当前y轴移动到指定位置

tutle.setheading(angle),tutle.seth():设置当前朝向为angle的角度

tutle.home():设置画笔位置到原点,朝向东

画笔设置命令

tutle.pensize(width):画笔宽度

tutle.pencolor(colorstring):画笔颜色

tutle.colormode(mode):改变颜色生成模式

tutle.fillcolor(colorstring):绘制图形填充颜色

tutle.color(color1,color2):同时设置pencolor=color1,fillcolor=color2

tutle.filling():返回当前是否在填充装填

tutle.begin_fill():准备开始填充图形

tutle.end_fill():填充完成

tutle.hideturle():隐藏画笔形状

tutle.showturle():显示画笔形状

画笔控制命令

tutle.clear():清空turle窗口,但turtle位置和状态不改变

tutle.reset():清空窗口,重置turtle状态为起始状态

tutle.undo():撤销上一个turtle动作

tutle.isvisable():返回当前turtle是否可见

tutle.stamp():复制当前图形

tutle.write(s,font):写文本s,字体是font

tutle.dot(r,color):绘制一个指定直径和颜色的原点

tutle.circle(radius,extents,steps):以给定半径画圆,半径radius为正(负),表示圆心在画笔的左边(右边)画圆

其他高级命令

tutle.done():程序暂停,直到用户关闭。一般是最后一个语句

tutle.mode(mode=None):设置standard,logo,world

tutle.delay(delay=None):设置或返回以毫秒为单位的绘图延迟

tutle.begin_poly():开始记录多边形的顶点

tutle.end_poly():停止记录多边形的顶点

tutle.get_poly():返回最后记录的多边形

模式‘standard’与turtle.py兼容。

模式‘logo’与大多数Logo-Turtle-Graphics兼容。

模式‘world’使用用户定义的‘worldcoordinates’。

程序一,简易时钟

# coding=utf-8import turtlefrom datetime import * # 由于表盘刻度不连续,需频繁抬起画笔,放下画笔def skip(step):    turtle.penup()  # 画笔抬起    turtle.forward(step)  # 画笔移动step    turtle.pendown()  # 画笔落下 # 建立表针,定制表针形状和名字def make_hand(name, length):    turtle.reset()     skip(-length * 0.1)  # 表针一端,过表盘中心一小段,开始绘制    turtle.begin_poly()  # 开始记录多边形的第一个顶点。    turtle.forward(length * 1.1)  # 设置表针长度,绘制表针    turtle.end_poly()  # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。     handForm = turtle.get_poly()  # 返回最后记录的形状     turtle.color('black')    turtle.register_shape(name, handForm)  # 三个表针初始化,实例化def init_hand():    global sec_hand, min_hand, hou_hand, printer    # 重置Turtle指向北    turtle.mode("logo")  # logo:向上(北) 顺时针   standard:向右(东)  逆时针     # 建立三个表针Turtle并初始化    make_hand("sec_Hand", 135)    make_hand("min_Hand", 110)    make_hand("hou_Hand", 70)     sec_hand = turtle.Turtle()    sec_hand.shape("sec_Hand")    min_hand = turtle.Turtle()    min_hand.shape("min_Hand")    hou_hand = turtle.Turtle()    hou_hand.shape("hou_Hand")     # 笔的属性    for hand in sec_hand, min_hand, hou_hand:        hand.shapesize(1, 1, 3)        hand.speed(0)     # 建立输出打印的文字Turtle    printer = turtle.Turtle()     # 隐藏画笔的turtle形状    printer.hideturtle()    printer.penup()  # 设置表盘def set_clock(radius):    turtle.reset()    turtle.pencolor('black')  # 设置画笔颜色    turtle.fillcolor('pink')  # 设置绘制图形的填充颜色    turtle.pensize(10)  # 画笔宽度     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)  # 显示星期def show_week(t):    week = ["星期一  Mon", "星期二  Tue", "星期三  Wed", "星期四  Thu", "星期五  Fri", "星期六  Sat", "星期日  Sun"]    return week[t.weekday()]  # t.weekday() 周一为0,周二为1...可作为列表的index  # 显示日期def show_data(t):    y = t.year    m = t.month    d = t.day    return "{} 年 {} 月 {} 日".format(y, m, d) # 显示整个时钟def show_clock():    # 获取时间    t = datetime.today()    second = t.second + t.microsecond * 0.000001    minute = t.minute + second / 60.0    hour = t.hour + minute / 60.0     sec_hand.setheading(6 * second)    min_hand.setheading(6 * minute)    hou_hand.setheading(30 * hour)     turtle.tracer(False)    printer.back(65)    printer.write(show_week(t), align='center', font=("Courier", 14, "bold"))    printer.forward(65)    printer.write(show_data(t), align='center', font=("Courier", 14, "bold"))     # 回到原点,以便于下一轮的显示    printer.home()    turtle.tracer(True)     # 100ms后继续调用show_clock    turtle.ontimer(show_clock, 100) # main函数def main():    turtle.tracer(False)    # 设置背景    ts = turtle.getscreen()    ts.bgcolor("#cccccc")    # 初始化    init_hand()    # 设置时钟    set_clock(180)    turtle.tracer(True)    # 显示时钟    show_clock()    turtle.mainloop() if __name__ == "__main__":    main()

程序二,佩奇

import turtle as tt.pensize(4)t.hideturtle()t.colormode(255)t.color((255, 155, 192), "pink")t.setup(840, 500)t.speed(20)# 鼻子t.pu()t.goto(-100, 100)t.pd()t.seth(-30)t.begin_fill()a = 0.4for i in range(120):    if 0 <= i < 30 or 60 <= i < 90:        a = a + 0.08        t.lt(3)  # 向左转3度        t.fd(a)  # 向前走a的步长    else:        a = a - 0.08        t.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.4for i in range(60):    if 0 <= i < 30 or 60 <= i < 90:        a = a + 0.08        t.lt(3)  # 向左转3度        t.fd(a)  # 向前走a的步长    else:        a = a - 0.08        t.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.exitonclick()

程序三,玫瑰花

import turtleturtle.speed(5) # 设置初始位置  turtle.penup()  turtle.left(90)  turtle.fd(200)  turtle.pendown()  turtle.right(90)# 花蕊  turtle.fillcolor("red")  turtle.begin_fill()  turtle.circle(10,180)  turtle.circle(25,110)  turtle.left(50)  turtle.circle(60,45)  turtle.circle(20,170)  turtle.right(24)  turtle.fd(30)  turtle.left(10)  turtle.circle(30,110)  turtle.fd(20)  turtle.left(40)  turtle.circle(90,70)  turtle.circle(30,150)  turtle.right(30)  turtle.fd(15)  turtle.circle(80,90)  turtle.left(15)  turtle.fd(45)  turtle.right(165)  turtle.fd(20)  turtle.left(155)  turtle.circle(150,80)  turtle.left(50)  turtle.circle(150,90)  turtle.end_fill()   # 花瓣1  turtle.left(150)  turtle.circle(-90,70)  turtle.left(20)  turtle.circle(75,105)  turtle.setheading(60)  turtle.circle(80,98)  turtle.circle(-90,40)   # 花瓣2  turtle.left(180)  turtle.circle(90,40)  turtle.circle(-80,98)  turtle.setheading(-83)   # 叶子1  turtle.fd(30)  turtle.left(90)  turtle.fd(25)  turtle.left(45)  turtle.fillcolor("green")  turtle.begin_fill()  turtle.circle(-80,90)  turtle.right(90)  turtle.circle(-80,90)  turtle.end_fill()  turtle.right(135)  turtle.fd(60)  turtle.left(180)  turtle.fd(85)  turtle.left(90)  turtle.fd(80)   # 叶子2  turtle.right(90)  turtle.right(45)  turtle.fillcolor("green")  turtle.begin_fill()  turtle.circle(80,90)  turtle.left(90)  turtle.circle(80,90)  turtle.end_fill()  turtle.left(135)  turtle.fd(60)  turtle.left(180)  turtle.fd(60)  turtle.right(90)  turtle.circle(200,60) 

怎么样?

有趣吧?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

标签: #pythonturtle库seth