python turtle库画图案-python之绘制图形库turtle(转)
关于绘制图形库turtle#画布上,默认有一个坐标原点为画布中心的坐标轴(0,0),默认"standard"模式坐标原点上有一只面朝x轴正方向小乌龟一:海龟箭头Turtle相关方法##############################1.绘制的运动 ##############################a).移动和绘制#turtle.forward(distance) | turtle.fd(distance)#画笔向绘制方向的当前方向移动distance(integer or float)的pixels距离,#例如:
turtle.fd(150)
# turtle.backward(distance) | turtle.back(distance) | turtle.bk(distance)# 画笔向绘制方向的相反方向移动distance(integer or float)的pixels距离# 例如:
turtle.backward(200)
# turtle.right(angle) | turtle.rt(angle)# 绘制方向向右旋转angle度# 例如:
turtle.rt(45)
# turtle.left(angle) | turtle.lt(angle)# 绘制方向向左旋转angle度# 例如:
turtle.lt(45)
# turtle.setpos(x, y=None) | turtle.setposition(x, y=None) | turtle.goto(x, y=None)# 移动到绝对位置,如果画笔按下,就画线# 参数x(a number or a pair/vector of numbers)# 参数y(a number or None)# 如果y为None,x必须是a pair of coordinates or a Vec2D# 例如:
turtle.setpos((20,80))
turtle.setposition(120,20)
turtle.goto(60,30)
# turtle.setx(x)# y纵向坐标不变,更改x横向坐标,x(integer or float)# 例如:
turtle.setx(15)
# turtle.sety(y)# x横向坐标不变,更改y纵向坐标,y(integer or float)# 例如:
turtle.sety(15)
# turtle.seth(to_angle) | turtle.setheading(to_angle)# 将方向设置成to_angle.to_angle(integer or float)to_angle的值在不同模式下含义如下"standard"模式逆时针 "logo"模式顺时针 0 - east 0 - north 90 - north 90 - east 180 - west 180 - south 270 - south 270 - west如下图“standard”模式时(默认0时表示x方向向右即向东);“logo”模式时(默认0时表示y方向向上即向北) y“logo”时 ^ | | | (0,0)——————> x“standard”时# 例如:
# “standard”模式时角度为逆时针,所以90度表示向北;logo”模式时角度为顺时针,所以90度表示向东turtle.setheading(90)
# turtle.home()# 将位置和方向恢复到初始状态,位置初始坐标为(0,0),方向初始为("standard"模式为right向右即东,"logo"模式是up向上即北)# 例如:
turtle.home()
# turtle.circle(radius, extent=None, steps=None)# 按给定的半径画圆,当前位置为圆的初始端点 Parameters: radius(a number,圆半径,为正数则逆时针画,为负数则顺时针画,方向随着轨迹的变化而变化) extent(a number or None,一个角度,决定哪部分圆圈被绘制,不提供extent表示画完整的圆) steps(an integer or None,指定半径radius前提下,完成extent的角度时,分了几步,如画正5边形时turtle.circle(40, None, 5))# 例如:
turtle.home()
# 当前位置(0,0)开始逆时针画半径为30的圆
turtle.circle(30)
# 逆时针画半径为50的半圆
turtle.circle(50, 180)
# 方向值为180,“standard”模式时方向向左,“logo”模式方向向下
print(turtle.heading())
turtle.circle(-50, 180)
print(turtle.heading())
# 逆时针方向半径为40画五边形(5步画接近整圆的图形)
turtle.circle(40, None, 5)
# turtle.dot(size=None, *color)# 按给定直径size画圆点(None[未提供时取pensize+4 和 2*pensize中的最大值] 或 >= 1的整数),color圆点颜色# 例如:
turtle.home()
# 当前画笔大小为1
print(turtle.pensize())
# 未提供取最大直径值为pensize+4 = 5
turtle.dot()
turtle.fd(50)
# 以直径为5画蓝色圆点
turtle.dot(5, "blue")
turtle.fd(50)
# 以直径为20画红色圆点
turtle.dot(20, "red")
turtle.fd(50)
print(turtle.position())
print(turtle.heading())
# turtle.stamp()和turtle.clearstamp(stamp_id)和turtle.clearstamps(n=None)# turtle.stamp()是在当前位置拷贝一份此时箭头的形状,返回一个stamp_id(int型),# turtle.clearstamp(stamp_id)用来删除指定stamp_id的箭头形状# turtle.clearstamps(n=None),n为None时表示删除所有拷贝的箭头形状;为0不删除;n > 0 表示删除前n个,n < 0 表示删除后n个# 例如:
# 画笔颜色设成红色
turtle.color("red")
num = 0
while num < 5:
# 当前位置拷贝一份箭头形状
stamp_id = turtle.stamp()
turtle.fd(50)
num += 1
# 改变画笔颜色为黑
turtle.color("black")
# 删除拷贝的箭头形状(此处id最后一次复制的stamp_id)
turtle.clearstamp(stamp_id)
# 删除前1个
turtle.clearstamps(1)
# 删除后1个
turtle.clearstamps(-1)
# 全部删除
turtle.clearstamps()
# 不删除
# turtle.clearstamps(0)
# turtle.undo()# (每调用一次就)撤销最后的一次动作,需要撤销所有可通过while turtle.undobufferentries(),turtle.undobufferentries()返回当前可撤销次数# 例如:
# 一直撤销最后一个动作直到不可撤销
while turtle.undobufferentries():
# 撤销最后的一次动作
turtle.undo()
# turtle.speed(speed=None) Parameters: peed为0-10的整数(1-10越来越快,0表示最快,参数为小数会被自动置为整数)或如下内置的速度字符串,如果>10或小于0.5则被置为0;为>=0.5的小数时被置为四舍五入的值。speed未设置则返回当前速度# 内置的速度字符串: “fastest”: 0 “fast”: 10 “normal”: 6 “slow”: 3 “slowest”: 1# 例如:
# 速度为0,表示速度最快
turtle.speed(0)
# <0.5速度会被置为0,表示速度最快
turtle.speed(0.4)
# >10速度会被置为0,表示速度最快
turtle.speed(20)
# 速度字符串fastest,表示速度最快
turtle.speed("fastest")
# 速度最慢
turtle.speed("slowest")
# 速度为9
turtle.speed(9)
b).获取(海龟)箭头的状态# position() | pos()# 返回(海龟)箭头当前位置坐标# 例如:
turtle.pos()
# turtle.towards(x, y=None)# 返回(海龟)箭头当前位置指向(x,y)位置连线的向量的角度(取决于当前模式,“standard”/”world”默认方向向右(即东)逆时针开始;“logo”模式默认方向向上(即北)顺时针开始) Parameters: x:x可以是一个number或一个pair/vector of numbers或一个turtle instance y:x是一个number,y就是一个number;否则y为None# 例如:
turtle.goto(20, 20)
# 移动后,位置为(20,20),两个向量分别是(20,20)点到(0, 0)点的向量和(20, 20)点到箭头当前方向的向量("standard"模式默认向右,逆时针算角度,"logo"模式默认向上,顺时针算角度)
angle = turtle.towards(0, 0)
print("两向量角度:", angle)
# turtle.towards((0, 0), None)
angle = turtle.towards((0, 0))
print("两向量角度:", angle)
# turtle箭头当前位置与turtle1箭头当前位置连线的向量到turtle箭头当前位置与turtle当前方向连线的向量角度
turtle1 = turtle.Turtle()
turtle1.setpos(0, 0)
angle = turtle.towards(turtle1)
# "standard"模式逆时针算角度,所以towards()后的角度angle是225,不是135
print("两向量角度:", angle)
# turtle.xcor() 和 turtle.ycor()# turtle.xcor()是返回(海龟)箭头的x坐标,turtle.ycor()是返回(海龟)箭头的y坐标# 例如:
turtle.lt(50)
turtle.fd(100)
# 打印箭头当前坐标(64.28,76.60)
print(turtle.pos())
# 原数据64.27876096865394,保留5位后打印64.27876
print(round(turtle.xcor(), 5))
# 原数据76.60444431189781,保留5位后打印76.60444
print(round(turtle.ycor(), 5))
# turtle.heading()# 返回当前箭头方向角度,取决于当前模式mode,“standard”模式时默认方向向右逆时针计算角度;“logo”模式默认方向向上,顺时针计算角度# 例如:
见turtle.circle中的例子
# turtle.distance(x, y=None)# 返回当前(海龟)箭头坐标与坐标(x,y)间距离或当前(海龟)箭头坐标与另一个(海龟)箭头坐标间距离 Parameters: x:x可以是一个number或一个pair/vector of numbers或一个turtle instance y:x是一个number,y就是一个number;否则y为None# 例如:
turtle.home()
# 距离为50
print(turtle.distance(30,40))
# 距离为50
print(turtle.distance((30,40)))
joe = turtle.Turtle()
joe.setpos(30, 40)
# 距离为50
print(turtle.distance(joe))
# c).设置与测量# turtle.degrees(fullcircle=360.0) 和 turtle.radians()# turtle.degrees表示设置一个完整圆的“度数”。默认值为360度,参数fullcircle(number类型),如果是360度时的90度,假如改成整圆为400度则此时角度应该是90/360*400# turtle.radians()表示将一个完整圆的“度数”设置成2π,如果是360度时的90度则此时角度应该是90/360*(2π)# 例如:
turtle.home()
turtle.left(90)
# 输出(360份里的90份)90.0
print(turtle.heading())
# 将一个完整圆的“度数”从360度改成400度
turtle.degrees(400.0)
# 输出(400份里的100份)100.0
print(turtle.heading())
# 将一个完整圆的“度数”设置成360度
turtle.degrees(360)
# 输出(360份里的90份)90.0
print(turtle.heading())
turtle.radians()
# 输出(2π份里的1.5707963267948966份)1.5707963267948966
print(turtle.heading())
############################## 2.画笔控制 ############################### a).画笔绘制状态# 旧方法 turtle.penup() | turtle.up() | turtle.pu()# 画笔抬起,此时移动不会进行绘制操作# 例如:
turtle.pu()
# 旧方法 turtle.pendown() | turtle.down() | turtle.pd()# 画笔按下,此时移动会进行绘制操作# 例如:
turtle.pd()
# turtle.width(width=None) | turtle.pensize(width=None)# 设置或返回线的粗细(width=None时表示返回,不为None表示设置),注意如果resizemode设置成"auto"并且绘制的是多边形,则多边形绘制时使用相同的线条粗细# 例如:
# 设置线条粗细为5
turtle.pensize(5)
# 返回线条粗细为5
turtle.pensize()
# turtle.pen(pen=None, **pendict)# 设置或返回画笔字典中对应的画笔属性(一个键值对) Parameters: (pendict)画笔字典键值对如下 “fillcolor”: color-string or color-tuple “outline”: positive number “pencolor”: color-string or color-tuple “pendown”: True/False “pensize”: positive number “resizemode”: “auto” or “user” or “noresize” “shearfactor”: number “shown”: True/False “speed”: number in range 0..10 “stretchfactor”: (positive number, positive number) “tilt”: number# 例如:
# 打印{'shown': True, 'pendown': True, 'pencolor': 'black', 'fillcolor': 'black', 'pensize': 1, 'speed': 3, 'resizemode': 'noresize', 'stretchfactor': (1.0, 1.0), 'shearfactor': 0.0, 'outline': 1, 'tilt': 0.0}
print(turtle.pen())
turtle.pen(fillcolor="black", pencolor="red", pensize=10)
# 打印排序后的为 [('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'), ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'), ('shearfactor', 0.0), ('shown', True), ('speed', 3), ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)]
print(sorted(turtle.pen().items()))
turtle.fd(100)
penstate=turtle.pen()
turtle.pen(penstate, fillcolor="green")
# turtle.isdown()# 获取画笔是否按下,按下返回True,否则返回False# 例如:
turtle.pu()
# 打印False
print(turtle.isdown())
turtle.pd()
# 打印True
print(turtle.isdown())
# b).画笔颜色控制# turtle.pencolor(*args)# 设置或返回画笔颜色(设置后海龟箭头的外轮廓也是这个颜色)# 例如:
# 返回画笔颜色
turtle.pencolor()
# pencolor(colorstring)语法设置画笔颜色
turtle.pencolor("red")
turtle.fd(50)
# pencolor(colorstring)语法设置画笔颜色
turtle.pencolor("#33cc8c")
turtle.fd(50)
# pencolor(r, g, b)或pencolor((r, g, b))语法设置画笔颜色,取决于颜色模式,colormode颜色模式取值1.0或255,colormode为1.0时r,g,b取值范围0-1.0小数;colormode为255时r,g,b取值范围0-255的整数
turtle.getscreen().colormode(1.0)
# 打印颜色模式为1.0
print(turtle.getscreen().colormode())
turtle.pencolor(0.1, 0.2, 0)
turtle.fd(50)
turtle.getscreen().colormode(255)
# 打印颜色模式为255
print(turtle.getscreen().colormode())
turtle.pencolor(30, 210, 180)
turtle.fd(50)
# turtle.fillcolor(*args)# 返回或设置画笔填充颜色(设置后海龟箭头内部填充也是这个颜色)# 用法同turtle.pencolor(*args)方法# 例如:
print(turtle.fillcolor())
screen = turtle.getscreen()
# pencolor(colorstring)语法设置画笔颜色
turtle.fillcolor("red")
turtle.fd(50)
# fillcolor(colorstring)语法设置画笔颜色
turtle.fillcolor("#33cc8c")
turtle.fd(50)
# fillcolor(r, g, b)fillcolor((r, g, b))语法设置画笔颜色,取决于颜色模式,colormode颜色模式取值1.0或255,colormode为1.0时r,g,b取值范围0-1.0小数;colormode为255时r,g,b取值范围0-255的整数
screen.colormode(1.0)
# 打印颜色模式为1.0
print(screen.colormode())
turtle.fillcolor(0.1, 0.2, 0)
turtle.fd(50)
screen.colormode(255)
# 打印颜色模式为255
print(screen.colormode())
turtle.fillcolor(30, 210, 180)
turtle.fd(50)
# turtle.color(*args)# 设置或返回pencolor和fillcolor# 例如:
# 返回pencolor和fillcolor ('black','black')
print(turtle.color())
# color(colorstring)或color((r,g,b))或color(r,g,b)将pencolor和fillcolor都设置成红色
turtle.color("red")
# 返回pencolor和fillcolor ('red','red')
print(turtle.color())
# color(colorstring1, colorstring2)或color((r1,g1,b1), (r2,g2,b2))分别设置pencolor和fillcolor
turtle.color("red", "yellow")
# 返回pencolor和fillcolor ('red','yellow')
print(turtle.color())
turtle.color("#285078", "#a0c8f0")
# 返回pencolor和fillcolor ((0.1568627450980392, 0.3137254901960784, 0.47058823529411764), (0.6274509803921569, 0.7843137254901961, 0.9411764705882353))
print(turtle.color())
# c).填充# turtle.filling()返回填充状态(填充状态则返回True,否则返回False)、开始填充图形之前先调用turtle.begin_fill()、填充完图形后调用turtle.end_fill()# 例如:
# 返回False
print(turtle.filling())
# 绘制shape之前先准备开始fill
turtle.begin_fill()
# 返回True
print(turtle.filling())
turtle.circle(20, None, 6)
# 绘制完shape之后结束fill
turtle.end_fill()
# 返回False
print(turtle.filling())
# d).更多的绘制控制,注意screen其实是TurtleScreen对象的实例,使用screen时要先通过screen = turtle.getscreen()得到# turtle.reset() | turtle.resetscreen() | screen.reset() | screen.resetscreen()# 清屏并将画笔位置和方向恢复到初始状态,保持画笔形状不变,即位置恢复到原点(0, 0)位置,"standard"/"world"模式方向也恢复到默认的向右,"logo"模式方向恢复到默认的向上# 例如:
turtle.reset()
# turtle.clear() | turtle.clearscreen() | screen.clear() | screen.clearscreen()# 清屏并且画笔形状也恢复默认,保持画笔位置和方向不变# 例如:
turtle.clear()
# turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal")) Parameters: arg – object to be written to the TurtleScreen 待绘制的文本 move – True/False 设置是否绘制 align – one of the strings “left”, “center” or right”设置文本下方初始位置 font – a triple (fontname, fontsize, fonttype) 设置字体# 绘制文本# 例如:
# 绘制文本“Home = ”,move为True表示画笔从文本下边align所在位置一直绘制到文本右下方,默认False不绘制
turtle.write("Home = ", True, align="center")
turtle.write((0,0), True)
############################## 3.绘制状态 ############################### a).显示/隐藏# turtle.hideturtle() | turtle.ht()# 隐藏画笔(即海龟箭头),此时只要画笔是按下状态,虽然隐藏了但是还是能绘制图形的,复杂的快速绘图时效果显著# 例如:
turtle.hideturtle()
# turtle.showturtle() | turtle.st()# 显示画笔(即海龟箭头)# 例如:
turtle.showturtle()
# turtle.isvisible()# 返回(海龟)画笔当前是否是可见状态,可见返回True,否则返回False# 例如:
turtle.hideturtle()
# 返回False
print(turtle.isvisible())
turtle.showturtle()
# 返回True
print(turtle.isvisible())
# b).外观# turtle.shape(name=None) Parameters: name – 形状名,必须在TurtleScreen的形状字典中,如(粗大箭头1)“arrow”,(海龟箭头) “turtle”, (实心圆箭头)“circle”, (实心方形箭头)“square”, (粗大箭头2)“triangle”, 默认的箭头“classic”# 设置或返回(海龟)画笔箭头形状名# 例如:
# 打印 'classic'
print(turtle.shape())
turtle.shape("turtle")
# 打印 'turtle'
print(turtle.shape())
# turtle.resizemode(rmode=None) Parameters: rmode – “auto”, “user”, “noresize”,3选1,具体说明如下 “auto”: 此模式下(海龟)画笔箭头随 pensize变化而变化. “user”: 此模式下(海龟)画笔箭头大小取决于【通过shapesize()进行设置的】.stretchfactor和outlinewidth (outline)的值 “noresize”:此模式下(海龟)画笔箭头大小不变# 设置或返回(海龟)画笔箭头大小的缩放模式
# turtle.shapesize(stretch_wid=None, stretch_len=None, outline=None) | turtle.turtlesize(stretch_wid=None, stretch_len=None, outline=None) Parameters: stretch_wid – positive number 与当前箭头方向的垂直方向上的拉伸值 stretch_len – positive number 与当前箭头方向上的拉伸值 outline – positive number shape轮廓宽度值# 返回或设置画笔x/y方向拉伸值和(或)shape轮廓宽度,仅当resizemode为“user”模式时有效# 例如:
# 设置外轮廓颜色为red,填充色为black
turtle.pen(pencolor="red", fillcolor="black")
# 返回, (1.0, 1.0, 1)表示垂直方向缩放到原来为1倍,水平方向缩放到原来1倍,外轮廓宽度1
print(turtle.shapesize())
# 设置resizemode为"user"模式
turtle.resizemode("user")
# 表示垂直方向缩放到原来为5倍,水平方向缩放到原来5倍,外轮廓宽度12
turtle.shapesize(5, 5, 12)
# 返回, (5, 5, 12)
print(turtle.shapesize())
# 设置轮廓宽度为8
turtle.shapesize(outline=8)
# 返回,(5, 5, 8)
print(turtle.shapesize())
# turtle.shearfactor(shear=None) Parameters: shear – number (optional)# 设置或返回剪切因子,# 例如:
# 箭头改成圆形
turtle.shape("circle")
# 垂直缩放到5倍,水平缩放到2倍
turtle.shapesize(5, 2)
print(turtle.shearfactor())
# 创建另一个(海龟)箭头,和原来的拉开距离
tl = turtle.Turtle()
tl.pu()
tl.fd(100)
tl.pd()
tl.shape("circle")
# 垂直缩放到5倍,水平缩放到2倍
tl.shapesize(5, 2)
# 设置shearfactor为0.5
tl.shearfactor(0.5)
print(tl.shearfactor())
# turtle.tilt(angle) Parameters: angle – a number 箭头图标在现有角度基础上再旋转的角度,比如当前为45度,此基础45度变成90度# 保持箭头方向不变的前提下,旋转箭头形状# 例如:
# 清屏并恢复原始坐标位置(0,0)恢复默认方向向右
turtle.reset()
# 改变箭头形状为圆形
turtle.shape("circle")
# 垂直缩放到5倍,水平缩放到2倍
turtle.shapesize(5, 2)
# 保持方向向右,圆形箭头图标旋转45度
turtle.tilt(45)
# 画线
turtle.fd(100)
# 拷贝一份箭头形状
turtle.stamp()
# 保持方向向右,圆形箭头图标旋转45度
turtle.tilt(45)
# 画线
turtle.fd(100)
# turtle.tiltangle(angle=None) Parameters: angle – a number 忽略箭头现在的旋转角度,旋转到指定的角度数,比如当前为45度,忽略此时角度45,直接旋转到45度# 获取或设置(保持箭头方向不变的前提下,)旋转箭头形状的角度# 例如:
# 清屏并恢复原始坐标位置(0,0)恢复默认方向向右
turtle.reset()
# 改变箭头形状为圆形
turtle.shape("circle")
# 垂直缩放到5倍,水平缩放到2倍
turtle.shapesize(5, 2)
# 保持方向向右,圆形箭头图标旋转45度
turtle.tilt(45)
# 画线
turtle.fd(100)
# 拷贝一份箭头形状
turtle.stamp()
# 保持方向向右,忽略当前箭头旋转的角度,圆形箭头图标旋转到45度
turtle.tiltangle(45)
# 返回角度45度
print(turtle.tiltangle())
# 画线
turtle.fd(100)
# turtle.shapetransform(t11=None, t12=None, t21=None, t22=None) Parameters: t11 – a number (optional) t12 – a number (optional) t21 – a number (optional) t12 – a number (optional)# 返回或设置箭头形状的当前变换矩阵# 例如:
# 返回 (1.0, 0.0, 0.0, 1.0)
print(turtle.shapetransform())
turtle.shape("square")
# 垂直方向缩放到4倍,水平缩放到2倍,正方形变长方形
turtle.shapesize(4, 2)
turtle.shearfactor(-0.5)
print(turtle.shapetransform())
# turtle.get_shapepoly()# 返回当前多边形的坐标对,一般用来定义一个新形状或作为一个复合形状的一部分# 例如:
turtle.shape("square")
turtle.shapetransform(4, -1, 0, 2)
# 输出 ((50, -20), (30, 20), (-50, 20), (-30, -20))
print(turtle.get_shapepoly())
############################## 4.绘制使用的事件 ############################### turtle.onclick(fun, btn=1, add=None) Parameters: fun – 一个有两个参数x,y的函数,画布上鼠标左键在当前海龟箭头位置按下时将点击的坐标作为参数,调用该方法 num – 鼠标按钮的数目,默认为1(鼠标左键) add – True或False.如果是True,将添加一个新的绑定;否则将替换前绑定# 画布上鼠标左键在当前海龟箭头位置按下时绑定一个函数;如果函数为None,则移除存在的绑定# 例如:
def turn(x, y):
turtle.lt(90)
# 打印当前坐标
print('x=', x, 'y=', y)
# 打印当前方向
print(turtle.heading())
# 清除绑定关系
turtle.onclick(None)
# 再次绑定
turtle.onclick(turn)
# 绑定turn方法
turtle.onclick(turn)
# turtle.onrelease(fun, btn=1, add=None) Parameters: fun – 一个有两个参数x,y的函数,画布上鼠标左键在当前海龟箭头位置弹起时将点击的坐标作为参数,调用该方法 num – 鼠标按钮的数目,默认为1(鼠标左键) add – True或False.如果是True,将添加一个新的绑定;否则将替换前绑定# 画布上鼠标左键在当前海龟箭头位置弹起时绑定一个函数;如果函数为None,则移除存在的绑定# 例如:
def turn(x, y):
turtle.lt(90)
# 打印当前坐标
print('x=', x, 'y=', y)
print(turtle.heading())
# 清除绑定关系
turtle.onrelease(None)
# 再次绑定
turtle.onrelease(turn)
# 绑定turn方法
turtle.onrelease(turn)
# turtle.ondrag(fun, btn=1, add=None) Parameters: fun – 一个有两个参数x,y的函数,画布上鼠标左键在当前海龟箭头位置按下并拖动时将点击的坐标作为参数,调用该方法 num – 鼠标按钮的数目,默认为1(鼠标左键) add – True或False.如果是True,将添加一个新的绑定;否则将替换前绑定# 画布上鼠标左键在当前海龟箭头位置按下并拖动时绑定一个函数;如果函数为None,则移除存在的绑定# 例如:
def move(x, y):
# 海龟箭头移动到当前拖动位置
turtle.goto(x, y)
# 清除绑定关系
turtle.ondrag(None)
# 再次绑定
turtle.ondrag(move)
# 绑定turn方法
turtle.ondrag(move)
############################## 5.特殊的绘制方法 ############################### turtle.begin_poly()、turtle.end_poly()和turtle.get_poly()配合使用# turtle.begin_poly()表示开始记录多边形第一个顶点# turtle.end_poly()表示结束记录多边形顶点# turtle.get_poly()表示获取最后记录的多边形# 例如:
turtle.home()
# 开始记录
turtle.begin_poly()
turtle.fd(100)
turtle.lt(20)
turtle.fd(30)
turtle.lt(60)
turtle.fd(50)
# 结束记录
turtle.end_poly()
# 返回记录的多边形
p = turtle.get_poly()
# ((0.00,0.00), (100.00,0.00), (128.19,10.26), (136.87,59.50))
print(p)
# 将“myFavouriteShape”Shape添加到TurtleScreen对象的shapelist中
turtle.register_shape("myFavouriteShape", p)
# 使用新添加的shape
turtle.shape("myFavouriteShape")
# turtle.clone()# 创建和返回具有相同位置、方向和海龟箭头属性的海龟的克隆# 例如:
mick = turtle.Turtle()
joe = mick.clone()
# turtle.getturtle() | turtle.getpen()# 返回当前海龟屏幕上第一个海龟对象本身# 例如:
pet = turtle.getturtle()
pet.fd(50)
print(pet)
# turtle.getscreen()# 返回绘制着海龟的海龟屏幕对象,获取该对象后就可以调用海龟屏幕对象的一些方法了# 例如:
# 获取海龟屏幕TurtleScreen对象
ts = turtle.getscreen()
print(ts)
# 调用海龟屏幕对象的bgcolor方法,设置背景颜色为粉红色
ts.bgcolor("pink")
# turtle.setundobuffer(size) Parameters: size – an integer【设置undo()可撤销的最大次数】或None【禁用undo()撤销功能】# 设置或禁用撤销功能, size为None表示禁用撤销功能;否则设置多大,就可以通过调用undo()方法撤销多少次# 例如:
turtle.setundobuffer(42)
# turtle.undobufferentries()# 获取当前剩余可撤销次数# 例如:
while turtle.undobufferentries(): # 判断是否可撤销
turtle.undo() # 执行撤销操作
二:海龟屏幕(TurtleScreen/Screen)的相关方法首先需要通过screen = turtle.getscreen()获取到海龟屏幕TurtleScreen的对象并赋值给变量screen,下文中screen均表示该海龟屏幕TurtleScreen的对象a)Window Control窗口控制# screen.bgcolor(*args) Parameters: args – 一个颜色字符串或3个范围是0-colormode的数字或三个元祖# 设置或返回海龟屏幕TurtleScreen的背景色# 例如:
screen = turtle.getscreen()
screen.bgcolor("orange")
# 打印 'orange'
print(screen.bgcolor())
screen.bgcolor("#800080")
# 打印(128.0, 0.0, 128.0)
print(screen.bgcolor())
# screen.bgpic(picname=None) Parameters: picname – 一个gif的字符串名字或"nopic"字符串或None git图片名:表示设置海龟屏幕TurtleScreen的背景图像 "nopic":表示删除海龟屏幕TurtleScreen的背景图像 None:表示返回海龟屏幕TurtleScreen的背景图像的名称# 设置/删除背景图片或返回当前的背景图片名# 例如:
screen = turtle.getscreen()
# 打印当前背景图像名,打印结果为'nopic'
print(screen.bgpic())
# 设置背景图像,landscape.gif需要提前放到该文件同级目录
screen.bgpic("landscape.gif")
# 打印当前背景图像名,打印结果为"landscape.gif"
print(screen.bgpic())
screen.bgpic('nopic')
# 打印当前背景图像名,打印结果为'nopic'
print(screen.bgpic())
# screen.clear() | screen.clearscreen() 和 screen.reset() | screen.resetscreen()# 例如:见【2.画笔控制中->d).更多的绘制控制】中例子
# screen.screensize(canvwidth=None, canvheight=None, bg=None) Parameters: canvwidth – 画布宽度(正整数,单位为像素) canvheight – 画布高度(正整数,单位为像素) bg – 新的背景颜色(colorstring或颜色组)# 如果没给出参数,则返回当前的画布大小(canvaswidth, canvasheight);否则表示调整画布大小# 例如:
screen = turtle.getscreen()
# 打印当前画布大小,结果为(400, 300)
print(screen.screensize())
# 调整画布大小,变大后出现了滚动条,可通过滑动滑块查看画布隐藏部分
screen.screensize(2000, 1500)
# 打印当前画布大小,结果为(2000, 1500)
print(screen.screensize())
# screen.setworldcoordinates(llx, lly, urx, ury) Parameters: llx – 画布左下角x坐标(number型) lly – 画布左下角y坐标(number型) urx – 画布右上角x坐标(number型) ury – 画布右上角y坐标(number型)# 设置用户自定义的坐标系统,如果必要的话需要切换到“world”模式,如果“world”模式已经是活动的,则会根据新的坐标重绘图纸。# 注意:在用户自定义的坐标系统中,角度可能会出现扭曲# 例如:
screen = turtle.getscreen()
# 获取当前海龟模式,打印结果为 logo
print(screen.mode())
turtle.shape("turtle")
# 清屏,位置方向恢复初始状态,保持海龟箭头形状不变
screen.reset()
# 设置海龟模式为"world"模式,感觉设不设置"world"模式展现效果没啥区别
screen.mode("world")
screen.setworldcoordinates(-50, -7.5, 50, 7.5)
for _ in range(72):
turtle.lt(10)
for _ in range(8):
turtle.lt(45);turtle.fd(2)
b)Animation Control动画控制# screen.delay(delay=None) Parameters: delay – 正整数# 设置或返回绘图延迟(单位:毫秒),绘图延迟越长,动画的速度越慢# 例如:
screen = turtle.getscreen()
# 获取绘图延迟毫秒数,打印结果为10
print(screen.delay())
# 设置绘图延迟
screen.delay(5)
# 获取绘图延迟毫秒数,打印结果为5
print(screen.delay())
# screen.tracer(n=None, delay=None) Parameters: n – 非负整数 delay – 非负整数,见screen.delay(delay=None)# 打开或关闭海龟动画,并设置绘制延迟# 例如:
screen = turtle.getscreen()
screen.tracer(8, 25)
dist = 2
for i in range(200):
turtle.fd(dist)
turtle.rt(90)
dist += 2
# screen.update()# 更新海龟屏幕TurtleScreen对象,tracer关闭时使用
c)Using screen events - 海龟屏幕TurtleScreen的相关事件# screen.listen(xdummy=None, ydummy=None)# 为了收集关键事件,让海龟屏幕TurtleScreen的对象获取焦点
# screen.onkey(fun, key) | screen.onkeyrelease(fun, key) Parameters: fun – 一个无参函数或None key – 一个字符串键值: 普通按键 (例如:“a”) 或功能键 (例如:“space”)# 键盘上key键key-release事件触发时(即按下并抬起)绑定一个无参函数;如果第一个参数fun为None,则移除绑定的函数# 注意:前提是海龟屏幕TurtleScreen对象需要通过screen.listen()方法获取焦点了# 例如:
def f():
turtle.fd(50)
turtle.lt(60)
screen = turtle.getscreen()
# 点击up键绑定f函数
screen.onkey(f, "Up")
# 屏幕获取焦点
screen.listen()
# screen.onkeypress(fun, key=None) Parameters: fun – 一个无参函数或None key – 一个字符串键值: 普通按键 (例如:“a”) 或功能键 (例如:“space”),key为None表示任何按键按下都会触发# 键盘上key键(如果key为None时表示任意按键)按下时即key-press事件触发时绑定一个无参函数;如果第一个参数fun为None,则移除绑定的函数。# 例如:
def f():
turtle.fd(50)
turtle.lt(60)
screen = turtle.getscreen()
# 按下"Up"键时绑定f函数
#screen.onkeypress(f, "Up")
# 按下任意键时绑定f函数
screen.onkeypress(f, None)
screen.listen()
# screen.onclick(fun, btn=1, add=None) | screen.onscreenclick(fun, btn=1, add=None) Parameters: fun – 一个有两个参数x,y的函数,画布上鼠标左键按下时将点击的坐标作为参数,调用该方法 num – 鼠标按钮的数目,默认为1(鼠标左键) add – True或False.如果是True,将添加一个新的绑定;否则将替换前绑定# 画布上鼠标左键在按下时绑定一个函数;如果函数为None,则移除存在的绑定# 例如:
screen = turtle.getscreen()
def turn(x, y):
turtle.lt(90)
# 打印当前坐标
print('x=', x, 'y=', y)
print(turtle.heading())
# 清除绑定关系
screen.onclick(None)
# 再次绑定
screen.onclick(turn)
# 绑定turn方法
screen.onclick(turn)
# screen.ontimer(fun, t=0) Parameters: fun – 一个无参的函数 t – 一个>=0的number# 开启一个计时器,t毫秒后调用函数fun# 例如:点击屏幕画多边形,再次点击停止绘制
# 定义全局变量
running = False
def demo1():
screen = turtle.getscreen()
def f():
# 内部函数想修改或使用全局变量需要加global,否则认为是局部变量
global running
if running:
turtle.fd(100)
turtle.lt(45)
# 开启计时器,250毫秒后执行f函数
screen.ontimer(f, 250)
def change_status(x, y):
# 内部函数想修改或使用全局变量需要加global,否则认为是局部变量
global running
# bool取反操作
running = not running
f()
screen.onclick(change_status)
def my_main():
demo1()
turtle.mainloop()
if __name__ == '__main__':
my_main()
# d)Input methods输入相关方法# screen.textinput(title, prompt) Parameters: title – 弹框标题(一个string字符串) prompt – 弹框提示(一个string字符串)# 弹出一个输入文本的弹出框,点击Cancel取消按钮则返回None,点击Ok按钮返回输入的字符串# 例如:
screen = turtle.getscreen()
# 弹出输入文本的弹出框
name = screen.textinput("欢迎框", "你的姓名是")
if (name != None and name != ""):
print(name, ",您好")
# screen.numinput(title, prompt, default=None, minval=None, maxval=None) Parameters: title – 弹框标题(一个string字符串) prompt – 弹框提示(一个string字符串) default – 默认值number类型 (可选) minval – 最小值number类型 (可选) maxval – 最大值number类型 (可选)# 弹出一个输入数字的弹出框,点击Cancel取消按钮则返回None,点击Ok按钮返回输入的number# 例如:
python turtle库画图案-python之绘制图形库turtle(转)相关推荐
- python turtle库画图案-python库之turtle(图形绘制) 开启新的快乐源泉
相信有不少人学习python 都是听了老前辈的推荐 "学python好,python有趣的代码多" 比如说画一只小狮子 这就是今天想要介绍的绘制图形库-turtle 如果也想这样画 ...
- python turtle库画图案-Python基础图形绘制库——turtle
(1).介绍 turtle库也叫海龟库,是turtle绘图体系的Python实现.turtle库是Python语言的标准库之一,是入门级的图形绘制函数库. turtle绘图体系:也叫海龟绘图系统,它是 ...
- python turtle库画图案-python中的turtle库绘制图形
1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...
- python turtle库画图案-Python如何使用turtle库绘制图形
1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...
- python turtle库画图案-Python:turtle库的使用及图形绘制
一.绘制一个八边形 使用turtle库,绘制一个八边形 代码: from turtle import * setup(800,800,20,20) penup() left(90) fd(350) l ...
- python turtle库画七彩蟒蛇_Python学习之turtle库和蟒蛇绘制程序
Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...
- 小福利,turtle库画了一个小风车
小福利,turtle库画了一个小风车 import turtle as tt.pencolor('blue') list1=['red','green','pink','yellow']for i i ...
- python从入门到入魔第八天——turtle库使用(含玫瑰花绘制实例)
turtle库的作用 python 提供画图工具标准库:turtle库包绘图坐标体系.画笔控制函数和形状绘制函数,用来绘制想要的图画,turtle库的调用方式参考Python从入门到入魔第五天--ji ...
- python画多个圆_python turtle库画一个方格和圆实例
python turtle库画一个方格和圆实例 使用python的turtle库画一个方格和圆 打开python编译器,导入turtle库 from turtle import * 首先画一个距离为1 ...
最新文章
- LomoX 桌面UI框架更新,增加资源管理
- 有道python网课怎么样-网易有道2017内推编程题 洗牌(python)
- 围成一圈的排列组合问题_约瑟夫问题
- VA_X_Setup1849.zip
- python中int是什么的缩写_python中int是什么类型
- 数据结构之单向环形列表解决josef问题
- 刚刚,华为云找到了更安全更卫生的乘坐电梯方式
- 《Entity Framework 6 Recipes》中文翻译系列 (45) ------ 第八章 POCO之获取原始对象与手工同步对象图和变化跟踪器...
- 所有的 iPhone 都已经被破解了!
- 84.负载均衡哈希算法:ip_hash与hash模块
- 电力系统——基于10机39节点的电力系统仿真(Matlab)
- 用MATLAB绘制三维网格图和三维曲面图
- 微信小程序——拼图游戏案例
- java面向对象猜拳游戏_面向对象猜拳游戏
- Mac Android Studio Flutter环境配置之第一个Futter项目
- linux nginx配置81端口用于访问web81
- 美国电子烟走向规范化,“下一站”是中国?
- 为自己加油!--ThoughtWorks面试后感
- 新版LinuxLinus Torvalds发布
- Golang-Flag包文档翻译
热门文章
- vant图标怎么显示不出来_U盘插进电脑但不显示怎么解决
- 老电脑安装matlab 2018卡不卡,软件装C盘会变卡?Windows系统要怎么用才不卡?
- arnold官方帮助文档_Baklib-随时编辑随时发布的在线帮助文档制作平台
- Bash: Removing leading zeroes from a variable
- APM-应用性能管理
- [CareerCup] 15.5 Denormalization 逆规范化
- IE6、IE7、IE8、Firefox兼容性CSS
- Matlab 非线性规划问题模型代码
- noip2019集训测试赛(五)
- Image Cloud Gallery