赞
踩
turtle库是Python自带的标准库,可以直接导入(import)后调用其中的命令。
表一:画笔运动命令
命令 | 功能说明 |
---|---|
turtle.forward(x)或turtle.fd(x) | 向当前画笔方向 移动x像素长度 |
turtle.backward(x) 或 turtle.bk(x)或 turtle.back(x) | 向当前画笔的相反方向 移动x像素长度 |
turtle.right(degree)或turtle.rt(degree) | 画笔方向顺时针移动degree度 |
turtle.left(degree) 或turtle.lt(degree) | 画笔方向逆时针移动degree度 |
turtle.tilt( degree) | 将画笔方向按顺时针旋转degree度 |
turtle.setheading(angle) 或turtle.seth(angle) | 设置画笔当前朝向为angle角度 |
turtle.pendown( )或turtle.pd( )或turtle.down( ) | 落下画笔,移动时绘制图形,缺省时也为绘制 |
turtle.penup( )或turtle.pu( )或turtle.up( ) | 提起画笔移动,不绘制图形,用于另起一个地方绘制 |
turtle.goto(x,y) 或turtle.steps(x,y)或turtle.setpositon(x,y) | 将画笔移动到坐标为x,y的位置 |
turtle.circle(radius,extend=None,steps=None ) | 以给定半径画圆。参数:radius–半径为正(负)表示圆心在画笔的左边(右边)画圆;extend–弧度,可选参数;steps–可选参数,做半径为radius的圆的内切正多边形。steps为多边形的边数。 |
turtle.setx(m ) | 将当前x轴移动到指定坐标m处,画笔落下时沿途会绘制 |
turtle.sety(n) | 将当前y轴移动到指定坐标n处,画笔落下时沿途会绘制 |
turtle.home( ) | 将当前画笔移动到原点处,画笔朝向东,画笔落下时沿途会绘制 |
turtle.dot ( r [,‘color’/ (R,G,B) ]) | 绘制一个指定直径和颜色的圆点,颜色缺省时默认为当前画笔颜色,指定颜色时可以是‘red’这样的字符串形式也可以是(R,G,B)元组形式 |
表二:画笔控制命令和画笔属性
命令 | 功能说明 |
---|---|
turtle.position()或turtle.pos() | 返回画笔的当前位置 |
turtle.xcor( ) | 返回当前的x坐标 |
turtle.ycor( ) | 返回当前的y坐标 |
turtle.filllcolor(‘color’) | 绘制图形的填充颜色 |
turtle.color(color1,color2) | 同时设置pencolor=color1,fillcolor=color2 |
turtle.filling() | 返回当前是否在填充状态 |
turtle.begin_fill() | 准备开始填充图形 |
turtle.end_fill() | 填充完成 |
turtle.hideturtle( ) 或turtle.ht( ) | 隐藏画笔的turtle形状 |
turtle.showturtle( )或turtle.st( ) | 显示画笔的turtle形状 |
turtle.pensize( ) | 设置线条的粗细。参数:width–一个正数 |
turtle.pencolor( ) | ,没有参数传入时返回当前画笔的颜色,传入参数设置护臂颜色,可以是字符串’color’形式,也可以是RGB3元组形式 |
turtle.speed(speed) | 设置画笔移动速度,画笔绘制的速度范围[0,10]整数 |
turtle.degrees( ) | 设置一整圈的度数。默认是360度。 |
turtle.radians( ) | 将角度测量单位设置为弧度。相当于degrees(2*math.pi) |
turtle.shape( ) | 设置乌龟的图形形状,取“arrow”,“turtle”,“circle”,“square”,“triangle”,“classic” |
turtle.shapesize( )或turtle.turtlesize( ) | 返回画笔的属性。 |
表三:全局控制命令
命令 | 功能说明 |
---|---|
turtle.screensize(w,h,bg) | 设置画布的宽(单位像素)、高、背景颜色;当没有参数输入时返回默认大小 |
turtle.setup(w,h) | w,h输入宽、高为整数时表示像素;为小数时表示占据电脑屏幕的比例,(startx,starty)这一坐标表示矩形窗口左上角顶点的位置,如果为空则窗口位于屏幕中心 |
turtle.clear( ) | 清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset( ) | 清空窗口,重置turtle状态为起始状态 |
turtle.undo( ) | 撤销上一个turtle动作 |
turtle.isvisible( ) | 返回当前turtle是否可见 |
turtle.stamp( ) | 复制当前图形到画布上,返回stamp_id.可以调用,可以删除。 |
turtle.clearstamp( ) | 删除stamp()返回的值。 |
turtle.write(s [,font=(’‘font-name’’,font-size,’‘font-type’’)]) | 写文本,s为文本内容,font是字体参数 |
turtle.towards(x,y) | 返回当前位置同指定位置(x,y)之间的角度 |
turtle.heading( ) | 返回当前的方向值 |
turtle.distance( ) | 返回x,y两个点之间的直线距离 |
turtle.shearfactor( ) | 设置或返回当前的剪切因子 |
turtle.tiltangle( ) | 设置或返回当前的倾斜角度 |
turtle.onclick( ) | 鼠标点击事件。参数:fun----一个带有两个参数的函数,这些参数将与画布上单点击的坐标一个调用。num—鼠标按钮数量,默认为1(鼠标左键)。add—为True的时候将添加新的绑定,否则替换以前的绑定。 |
turtle.onrelease( ) | 鼠标释放事件。参数同点击事件 |
turtle.ondrag( ) | 鼠标移动事件。参数同点击事件 |
turtle.clone( ) | 创建并返回具有相同位置等等属性的乌龟克隆 |
turtle.getturtle( )或turtle. getpen( ) | 获取turtle对象本身 |
turtle.getscreen( ) | 返回正在绘制的对象 |
turtle.setundobuffer( ) | 设置或禁用中断器。参数:size—整数。如果大小是None则禁用缓冲区。 |
turtle.bgcolor( ) | 设置或返回当前的TurtleScreen的背景颜色 |
turtle.bgpic( ) | 设置背景图片。参数:picname-文件名 |
turtle.ontimer | 定时器 |
turtle.textinput( ) 或turtle.numinput( ) | 弹出一个输入字符串和数字的窗口。 |
表四:其他命令
命令 | 功能说明 |
---|---|
turtle.mainloop( ) 或turtle.done( ) | 启动事件循环-调用Tkinter中的mainloop函数。这个语句必须是乌龟图形程序中的最后一个语句 |
turtle.mode(mode=None) | 设置乌龟模式(standard,logo或world)并执行重置。如果没有给出模式则返回当前模式。 |
turtle.delay(delay=None) | 设置或返回以毫秒为单位的绘图延迟 |
turtle.begin_poly( ) | 开始记录多边形的顶点,当前乌龟位置是多边形的第一个顶点 |
turtle.end_poly( ) | 停止记录多边形的顶点,当前乌龟位置是多边形的最后一个顶点 |
turtle.get_poly( ) | 返回最后记录的多边形 |
1.树形一
from turtle import * from random import * from math import * def tree(n, l): pd() t = cos(radians(heading() + 45)) / 8 + 0.25 pencolor(t, t, t) pensize(n / 4) forward(l) if n > 0: b = random() * 15 + 10 c = random() * 15 + 10 d = l * (random() * 0.35 + 0.6) right(b) tree(n - 1, d) left(b + c) tree(n - 1, d) right(c) else: right(90) n = cos(radians(heading() - 45)) / 4 + 0.5 pencolor(n, n, n) circle(2) left(90) pu() backward(l) bgcolor(0.5, 0.5, 0.5) ht() speed(0) tracer(0, 0) left(90) pu() backward(300) tree(13, 100) done()
效果图:
2.树形2
from turtle import * # 设置色彩模式是RGB: colormode(255) lt(90) lv = 14 l = 120 s = 45 width(lv) # 初始化RGB颜色: r = 0 g = 0 b = 0 pencolor(r, g, b) penup() bk(l) pendown() fd(l) def draw_tree(l, level): global r, g, b # save the current pen width w = width() # narrow the pen width width(w * 3.0 / 4.0) # set color: r = r + 1 g = g + 2 b = b + 3 pencolor(r % 200, g % 200, b % 200) l = 3.0 / 4.0 * l lt(s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) rt(2 * s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) lt(s) # restore the previous pen width width(w) speed("fastest") draw_tree(l, 4) done()
效果图:
3.时钟
import turtle from datetime import * # 抬起画笔,向前运动一段距离放下 def Skip(step): turtle.penup() turtle.forward(step) turtle.pendown() def mkHand(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) def Init(): global secHand, 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 in secHand, minHand, hurHand: hand.shapesize(1, 1, 3) hand.speed(0) # 建立输出文字Turtle printer = turtle.Turtle() # 隐藏画笔的turtle形状 printer.hideturtle() printer.penup() def SetupClock(radius): # 建立表的外框 turtle.reset() turtle.pensize(7) 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 Week(t): week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] return week[t.weekday()] def Date(t): y = t.year m = t.month d = t.day return "%s %d%d" % (y, m, d) def Tick(): # 绘制表针的动态显示 t = datetime.today() second = t.second + t.microsecond * 0.000001 minute = t.minute + second / 60.0 hour = t.hour + minute / 60.0 secHand.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) def main(): # 打开/关闭龟动画,并为更新图纸设置延迟。 turtle.tracer(False) Init() SetupClock(160) turtle.tracer(True) Tick() turtle.mainloop() if __name__ == "__main__": main()
效果图:
4.螺旋线
import turtle
turtle.speed("fastest")
turtle.pensize(2)
for x in range(100):
turtle.forward(2*x)
turtle.left(91)
turtle.done()
效果图:(可以尝试修改代码绘制彩色螺旋线)
5.黄金螺旋线(斐波那契螺旋线)
from turtle import * #import cmath speed(10) pensize(5) #判断较小整数的函数 def little(a,b): if a<b: return a else: return b #初始点 #矩形 x0 = 250 y0 = 150 r= little(2*x0,2*y0) #定义绘制、填充1/2正方形及扇形的函数 def square_sector(r,color_couple): color("black",color_couple[0]) begin_fill() #顺时针画1/2正方形 #for i in range(2): fd(r) rt(90) fd(r) end_fill() #顺时针画剩余1/2正方形及1/4圆弧 color("black",color_couple[1]) begin_fill() for i in range(2): rt(90) fd(r) rt(90) circle(-r,90) end_fill() #黄金比例 #golden_ratio = (cmath.sqrt(5)-1)/2#can't convert complex to int golden_ratio = 0.618 #5组填充色——[color_rect,color_arc]#1/2矩形,扇形 color_ls = [["#8F653B","#EDCB67"],["#B58539","#7D6A98"],\ ["#FAC374","#56ACA9"],["#D87D84","#DA8F3C"],["#769A43","#CF4749"]] pu() goto(x0,y0)#矩形的右上顶点,默认初始角度0 pd() seth(-90) #循环绘制、填充矩形及扇形 for i in range(5): r = 300*(golden_ratio**i)#边长 #rt(90)#"正方形圆弧图块整体"右转90度绘制 square_sector(r,color_ls[i]) hideturtle() done()
效果图:
用Python绘制斐波那契螺旋线(黄金螺旋线)
Python绘图Turtle库详解
python 学习笔记(三)—turtle库的使用(超详细)
以上示例代码整理于多名博主的博文,侵删!
关于turtle库的其他许多绘图命令尚未整理完全,之后会陆续在此篇博客更新。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。