python---turtle库(详解)

turtle库

https://blog.csdn.net/zengxiantao1994/article/details/76588580(部分引用来源)

初识turtle库(python内置库)

  • turtle库的使用:from turtle import * 或者 import turtle、前者使用方法不需要加 turtle,后者需要加turtle
例如:
'''
from turtle import *

circle(60)
done()
'''
import turtle

turtle.circle(60)
turtle.done()#绘图完,不自动结束

turtle库基本方法

画布(canvas)

画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

  1. 设置画布大小

第一种方法

turtle.screensize(canvwidth=None,canvheight=None,bg=None)
canvwidth -- 正整型数,以像素表示画布的新宽度值

canvheight -- 正整型数,以像素表示画面的新高度值

bg -- 颜色字符串或颜色元组,新的背景颜色

例如:turtle.screensize(800,600, "green")
turtle.screensize() #返回默认大小(400, 300)

第二种方法

turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
width -- 如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%

height -- 如为一个整型数值,表示高度为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 75%

startx -- 如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,None 表示窗口水平居中

starty -- 如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,None 表示窗口垂直居中

例如:
import turtle

turtle.setup(500,500)
done()

画笔属性

  • 画笔
    在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。
turtle.pensize(width=None)表示小乌龟运动轨迹的宽度(线条粗细) 
turtle.pencolor(*args)函数表示小乌龟运动轨迹的颜色

<<<允许以下四种输入格式:
pencolor()
返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色
pencolor(colorstring)
设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red"、"yellow" 或 "#33cc8c"。
pencolor((r, g, b))
设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围
pencolor(r, g, b)
设置画笔颜色为以 r, g, b 表示的 RGB 颜色。

turtle.speed(speed=None)速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
"fastest": 0 最快
"fast": 10 快
"normal": 6 正常
"slow": 3 慢
"slowest": 1 最慢
1.移动和绘制
命令 说明
turtle.forward(distance) 或 turtle.fd(distance) 向当前画笔方向移动distance像素长度
turtle.backward(distance) 或 turtle.bk(distance) 或 turtle.back(distance) 向当前画笔相反方向移动distance像素长度
turtle.right(degree) 或 turtle.rt(degree) 顺时针移动degree°
turtle.left(degree) 或 turtle.lt(degree) 逆时针移动degree°
turtle.goto(x,y) 或 turtle.setpos(x,y) 或 turtle.setposition(x,y) 将画笔移动到坐标为x,y的位置
turtle.setx() 将当前x轴移动到指定位置
turtle.sety() 将当前y轴移动到指定位置
turtle.setheading(angle) 或 turtle.seth(angle) 设置当前朝向为angle角度
turtle.home() 返回原点,朝向东。
turtle.circle() 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
turtle.undo() 撤销
turtle.speed() 速度
turtle.dot(size=None, *color) 绘制一个指定直径和颜色的圆点

注意:
turtle.left(-90) 相当于 turtle.right(90)
turtle.seth(angle)表示小乌龟启动时运动的方向。 是角度值。其中,0表示向东,90度向北,180度向西,270度向南;负值表示相反方向。
turtle.circle(radius, extent=None, steps=None)
radius – 一个数值:半径为正(负),表示圆心在画笔的左边(右边)画圆;
extent – 一个数值 (或 None):extent 为一个夹角,用来决定绘制圆的一部分。
steps – 一个整型数 (或 None):做半径为radius的圆的内切正多边形,多边形边数为steps

2.画笔控制
命令 说明
turtle.pendown() 或 turtle.pd() 或 turtle.down() 画笔落下
turtle.penup() 或 turtle.pu() 或 turtle.up() 画笔抬起
turtle.pensize() 或 turtle.width() 画笔粗细
turtle.pen(pen=None, **pendict) 画笔
turtle.isdown() 画笔是否落下(返回True或False)
turtle.color(color1, color2) 返回或设置画笔颜色color1和填充颜色color2。
turtle.pencolor() 画笔颜色
turtle.fillcolor() 填充颜色
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 结束填充
turtle.write() 书写

注意:
turtle.pen(pen=None, **pendict):返回或设置画笔的属性,以一个包含以下键值对的 “画笔字典” 表示:“shown”: True/False、“pendown”: True/False、“pencolor”: 颜色字符串或颜色元组、“fillcolor”: 颜色字符串或颜色元组、“pensize”: 正数值、“speed”: 0…10 范围内的数值、“resizemode”: “auto” 或 “user” 或 “noresize”、“stretchfactor”: (正数值, 正数值)、“outline”: 正数值、“tilt”: 数值

此字典可作为后续调用 pen() 时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。

turtle.write(arg, move=False, align=“left”, font=(“Arial”, 8, “normal”))

arg --: 要书写的文本内容

move --: True/False

align --: 字符串 “left”, “center” 或 “right”

font --: 一个三元组 (fontname, fontsize, fonttype)

3.其他命令
命令 说明
turtle.showturtle() 或 st() 显示画笔的turtle形状
turtle.hideturtle() 或 ht() 隐藏画笔的turtle形状
turtle.isvisible() 是否隐藏画笔的海龟形状
turtle.shape(name=None) 设置海龟形状为 name 指定的形状名,如未指定形状名则返回当前的形状名
turtle.done() 运行结束但不退出,必须是乌龟图形程序中的最后一个语句。
turtle.delay(delay=None) 设置或返回以毫秒为单位的绘图延迟。

应用实例

彩色python(蟒蛇)

python---turtle库(详解)

import turtle
turtle.setup(650, 350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
colors=['green','blue','yellow','orange','pink','purple']
turtle.seth(-40)
for i in range(4):
    turtle.color(colors[i])#选择索引从0~3的颜色
    turtle.circle(40, 80)#上半弧度
    turtle.circle(-40, 80)#下半弧度
turtle.color(colors[5])
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)

turtle.done()
# 改写 加入函数   画python
import turtle
def drawSnake(radius, angle, length):
    turtle.seth(-40)
    for i in range(length):
        turtle.circle(radius, angle)
        turtle.circle(-radius, angle)
    turtle.circle(radius, angle/2)
    turtle.fd(40)
    turtle.circle(16, 180)
    turtle.fd(40* 2/3)
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
drawSnake(40, 80, 4)
turtle.done()

多等边三角形

python---turtle库(详解)

from turtle import *

pensize(3)
color('black')
fd(200)
seth(-120)  #根据二维  就是x,y轴坐标系(第三象限-120°)来显示
fd(200)
seth(120)   #第二象限,120°
fd(200)
color('red')
seth(60)    #第一象限,60°
fd(200)
seth(-60)   #第四象限,-60°
fd(400)
seth(180)  #转一个平角
color('blue')
fd(400)
seth(60)    #第一象限,60°
fd(200)
done()

无角正方形

python---turtle库(详解)

from turtle import *
pensize(2)
pencolor('black')
for i in range(4):
    seth(90*i)
    penup()
    fd(20)
    pendown()
    fd(200)
    penup()
    fd(20)
    pendown()
hideturtle()#隐藏画笔
done()

六角星

python---turtle库(详解)

from turtle import *
def triangle():
    pensize(2)
    pencolor('black')
    for i in range(3):
        fd(60)
        right(120)

def main():
    colors=['green','red','yellow','pink','purple','orange']
    speed(7)
    for i in range(6):
        begin_fill()
        fillcolor(colors[i])
        triangle()
        fd(60)  #以坐标系为基准,左转60°
        left(60)
        end_fill()
    #填充中心颜色
    fillcolor("blue")
    begin_fill()
    for i in range(6):
        fd(60)
        left(60)
    end_fill()
    ht()#隐藏画笔
main()
done()

你猜

python---turtle库(详解)

from turtle import *
def triangle():
    pensize(2)
    pencolor('black')
    for i in range(3):
        fd(160)
        right(120)

def main():
    penup()
    setpos(-100,140)#画笔移动到一个绝对坐标。(开始默认画笔居中)
    pendown()
    speed(5)
    colors=['green','red','pink','purple','blue','yellow','orange']
    for i in range(6):
        fillcolor(colors[i])
        begin_fill()
        triangle()
        fd(160)
        right(60)
        end_fill()
    ht()
main()
done()

风车(为什么不会转呢?)

python---turtle库(详解)

from turtle import *
def triangle(x):
    pensize(2)
    pencolor('black')
    for i in range(3):
        fd(x)
        right(120)

def main():
    speed(8)
    colors=['green','red','yellow','blue']
    for j in range(1,7):
        for i in range(4):
            if j >= 2:
                triangle(160 + j * 10)
                left(90)
            else:
                fillcolor(colors[i])
                begin_fill()
                triangle(160)
                left(90)
                end_fill()
    ht()
main()
done()

龙卷风

python---turtle库(详解)

from turtle import *
# 龙卷风
setup(500,700)
pensize(1)
speed(6)
colors=['green','red','yellow','grey','orange','blue','pink','purple']
bgcolor('black')
for i in range(1,10):
    pencolor(colors[i%8])
    penup()
    goto(5*i,0)
    pendown()
    circle(10*i)
done()

同心圆(箭靶)

python---turtle库(详解)

# 同心圆
from turtle import *
setup(600, 500, 450, 50)
pensize(5)
bgcolor('white')
speed('fastest')
colors = ['blue', 'yellow', 'red', 'green', 'white', 'black', 'orange', 'grey']
for i in range(10, 1, -1):
    penup()
    goto(0, -20 * i)
    pendown()
    begin_fill()
    fillcolor(colors[i % 4])
    circle(20 * i)
    end_fill()
hideturtle()
done()

五环

python---turtle库(详解)

from turtle import *

setup(500, 500, 0, 0)
penup()
backward(50)
pendown()
# 先往后移动75像素,不显示直线
penup()
setx(-75)
pendown()

pensize(5)
pencolor('red')
circle(50)

penup()
fd(110)
pendown()

pencolor('black')
circle(50)

penup()
fd(110)
pendown()

pencolor('blue')
circle(50)

penup()
goto(-20, -50)
pendown()

pencolor('yellow')
circle(50)
penup()
fd(110)
pendown()

pencolor('green')
circle(50)
hideturtle()  # 隐藏画笔

done()

海绵宝宝

python---turtle库(详解)

from turtle import *

#大致外观
setup(600,600)
pensize(3)
speed(20)
color('black','yellow')
penup()
goto(-120,120)
pendown()
begin_fill()
seth(-45) #Turtle中的turtle.seth(angle)函数表示小乌龟启动时运动的方向
for i in range(0,4):
    for i in range(0,5):
        circle(15,90)
        circle(-15,90)
    right(90)
end_fill()

#眼睛
pensize(1)
color('black','white')
penup()
goto(-70,30)
pendown()
begin_fill()
circle(30)
end_fill()

#1眼睛
color('white','blue')
penup()
goto(-40,43)
pendown()
begin_fill()
circle(10)
end_fill()

#2眼睛
color('white','black')
penup()
goto(-35,46)
pendown()
begin_fill()
circle(5)
end_fill()

#左眉毛1
pensize(3)
color('black')
penup()
goto(-68,82)
pendown()
fd(6)

#左眉毛2
pensize(3)
color('black')
penup()
goto(-50,88)
pendown()
right(45)
fd(6)

#左眉毛3
pensize(3)
color('black')
penup()
goto(-30,82)
pendown()
right(30)
fd(6)

#右眼睛
pensize(1)
color('black','white')
penup()
goto(3,67)
pendown()
begin_fill()
circle(30)
end_fill()

#右1眼睛
color('white','blue')
penup()
goto(3,56)
pendown()
begin_fill()
circle(10)
end_fill()

#右2眼睛
color('white','black')
penup()
goto(7,54)
pendown()
begin_fill()
circle(5)
end_fill()

#右眉毛1
pensize(3)
color('black')
penup()
goto(10,82)
pendown()
left(50)
fd(6)

#右眉毛2
pensize(3)
color('black')
penup()
goto(30,88)
pendown()
right(20)
fd(6)

#右眉毛3
pensize(3)
color('black')
penup()
goto(50,82)
pendown()
right(15)
fd(6)

#嘴巴
pensize(1)
color('black','IndianRed3')
penup()
goto(-86,-20)
pendown()
left(65)
begin_fill()
right(33)
circle(70,150)
# circle(120,80)
fd(10)
left(130)
circle(-184,45)
end_fill()

#舌头
color('black', 'orange red')
penup()
goto(-66,-50)
pendown()
right(130)
circle(-140,46)

#鼻子
penup()
goto(-15,10)
pendown()
fd(40)
circle(5,180)
fd(40)

#裤子
color('black','white')
penup()
goto(-123,-85)
pendown()
begin_fill()
left(100)
fd(20)

left(93)
fd(225)

left(95)
fd(20)

left(85)
fd(225)
end_fill()

#二层裤子
color('black','orange4')
penup()
goto(-123,-106)
pendown()
begin_fill()
left(90)
fd(30)
left(90)
fd(225)
left(90)
fd(30)
left(90)
fd(225)
end_fill()

#裤缝
color('black')
pensize(8)
for i in range(0,4):
    penup()
    goto(-83+(i*60),-120)
    pendown()
    fd(30)

#裤腿1
color('black','orange3')
pensize(1)
penup()
goto(-63,-137)
pendown()
begin_fill()
left(90)
fd(10)
left(30)
circle(15,120)
left(30)
fd(10)
left(90)
fd(30)
end_fill()


#裤腿2
color('black','orange3')
pensize(1)
penup()
goto(23,-137)
pendown()
begin_fill()
left(90)
fd(10)
left(30)
circle(15,120)
left(30)
fd(10)
left(90)
fd(30)
end_fill()

#腿1
color('black')
penup()
goto(-53,-155)
pendown()
left(90)
fd(65)
fd(30)
left(90)
fd(20)
penup()
goto(-43,-155)
pendown()
right(90)
fd(60)
circle(20,90)
fillcolor('black')
begin_fill()
fd(5)
circle(-7,180)
fd(35)
right(90)
fd(24)
end_fill()

#腿2
color('black')
penup()
goto(33,-152)
pendown()
right(180)
fd(55)
fd(30)
left(90)
fd(20)
penup()
goto(43,-152)
pendown()
right(90)
fd(65)
circle(20,90)
fillcolor('black')
begin_fill()
circle(-7,180)
fd(32)
right(90)
fd(22)
end_fill()

#左手
color('black','yellow')
penup()
goto(-120,-10)
pendown()
begin_fill()
left(45)
fd(100)
circle(-15,80)
fd(5)
circle(5,180)
fd(20)
#第2个手指
right(150)
fd(35)
circle(5,180)
fd(40)

#第3个手指
right(150)
fd(30)
circle(5,180)
fd(30)

#第4个手指
right(140)
fd(30)
circle(5,180)
fd(45)
circle(15,90)

right(40)
right(70)
fd(110)
end_fill()

#右手
color('black','yellow')
penup()
goto(90,-10)
pendown()
begin_fill()
left(90)
fd(100)
circle(-15,80)
fd(5)
circle(5,180)
fd(20)
#第2个手指
right(150)
fd(35)
circle(5,180)
fd(40)

# #第3个手指
right(150)
fd(30)
circle(5,180)
fd(30)

# #第4个手指
right(140)
fd(30)
circle(5,180)
fd(45)
circle(15,90)

right(40)
right(70)
fd(98)
end_fill()

penup()
goto(-120,160)
pendown()
color("red")
write("你好呀!", font=('Arial', 40, 'normal'))
hideturtle()
done()
上一篇:Java中的方法与参数以及对象的组合


下一篇:设置UIView的简单阴影效果