Python turtle库入门小练习

表 1:turtle 库的画笔绘制状态函数(共 3 个)

函数 描述
pendown() 放下画笔
penup() 提起画笔,与 pendown()配对使用
pensize(width) 设置画笔线条的粗细为指定大小

表 2:turtle 库的画笔运动的函数(共 13 个)
函数 描述
forward() 沿着当前方向前进指定距离
backward() 沿着当前相反方向后退指定距离
right(angle) 向右旋转 angle 角度
left(angle) 向左旋转 angle 角度
goto(x,y) 移动到绝对坐标(x,y)处
setx( ) 将当前 x 轴移动到指定位置
sety( ) 将当前 y 轴移动到指定位置
setheading(angle) 设置当前朝向为 angle 角度
home() 设置当前画笔位置为原点,朝向东。
circle(step) 绘制一个指定半径,角度、以及绘制步骤 step 的
dot(r,color) 绘制一个指定半径 r 和颜色 color 的圆点
undo() 撤销画笔最后一步动作
speed() 设置画笔的绘制速度,参数为 0-10 之间


表 3: turtle 库的控制画笔颜色和字体的函数(共 11 个)
函数 描述
color() 设置画笔的颜色
begin_fill() 填充图形前,调用该方法
end_fill() 填充图形结束
filling() 返回填充的状态,True 为填充,False 为未填充
clear() 清空当前窗口,但不改变当前画笔的位置
reset() 清空当前窗口,并重置位置等状态为默认值
screensize() 设置画布的长和宽
hideturtle() 隐藏画笔的 turtle 形状
showturtle() 显示画笔的 turtle 形状
isvisible() 如果 turtle 可见,则返回 True
write(str,font=None) 输出 font 字体的字符串






1.绘制蟒蛇

# -*- coding: utf-8 -*-
import turtle
def drawSnake(rad,angle,len,neckrad):
    for i in range(len):
        turtle.circle(rad,angle)#rad画圆轨迹半径的长度
        turtle.circle(-rad,angle)#angle沿着远行爬行的弧度值
    turtle.circle(rad, 40)
    turtle.fd(rad)#向前爬行rad
    turtle.circle(neckrad+1,180)
    turtle.fd(rad*2/3)

def main():
    turtle.setup(1300,800,0,0)#长为1300,宽为800的窗口,(0,0)窗口左上角在屏幕中的位置
    pythonsize=30#30px
    turtle.pensize(pythonsize)#轨迹宽度
    turtle.pencolor("blue")#轨迹颜色
    turtle.seth(-40)#出发角度
    drawSnake(40,80,5,pythonsize/2)
    turtle.done()
main()

Python turtle库入门小练习_第1张图片



2.绘制五角星

# -*- coding: utf-8 -*-
from random import *
from math import *
from turtle import *
def main():
    p=Turtle()
    p.speed(3)
    p.pensize(5)
    p.pencolor("black")
    p.fillcolor("yellow")
    p.begin_fill()
    for i in range(5):
        p.forward(200)
        p.right(144)
    p.end_fill()
    done()
main()

Python turtle库入门小练习_第2张图片

3.利用广度优先遍历思想画树

# -*- coding: utf-8 -*-
from random import *
from math import *
from turtle import *
def tree(plist,l,a,f):
    if l>2:
        nextlist=[]
        for p in plist:
            p.forward(l)
            q=p.clone()
            p.left(a)
            q.right(a)
            nextlist.append(p)
            nextlist.append(q)
        tree(nextlist,l*f,a,f)
def main():
    p=Turtle()
    p.color("green")
    p.speed(10)
    p.pensize(1)
    p.left(90)
    p.hideturtle()#隐藏箭头
    p.penup()#抬笔
    p.goto(-100,-100)
    p.pendown()#落笔
    tree([p],90,60,0.65)
    done()
main()

Python turtle库入门小练习_第3张图片


4.读取文件中的数据绘图

data.txt中:直行像素,左转(0)还是右转(1),转动的角度,颜色代码

300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0

# -*- coding: utf-8 -*-
from math import *
from turtle import *
def main():
    p=Turtle()
    p.shape("turtle")#乌龟形状
    result=[]
    f=open("data.txt","r")
    for line in f:
        result.append(map(float,line.split(',')))#map表示将字符串类型的列表转化为float类型列表
    for i in range(len(result)):
        p.color(result[i][3],result[i][4],result[i][5])
        p.fd(result[i][0])
        if result[i][1]==0:
            p.left(result[i][2])
        else:
            p.right(result[i][2])
    done()
main()
Python turtle库入门小练习_第4张图片


5.创建钟表

# -*- coding: utf-8 -*-
from turtle import *
from datetime import *

def Skip(step):
    penup()
    forward(step)
    pendown()

#建立钟表的外框
def setupClock(radius):
    reset()
    pensize(7)
    for i in range(60):
        Skip(radius)
        if i%5==0:
            forward(20)
            Skip(-radius-20)
        else:
            dot(5)
            Skip(-radius)
        right(6)

#注册turtle形状,建立名字为name的形状
def makeHand(name,length):
    reset()
    Skip(-0.1*length)
    # 开始记录多边形的顶点
    begin_poly()
    forward(1.1*length)
    # 停止记录多边形的顶点,并与第一个顶点相连
    end_poly()
    #返回最后记录的多边形
    handForm=get_poly()
    #注册形状,命名为name
    register_shape(name,handForm)


def init():
    global secHand,minHand,hurHand,printer
    #重置turtle指针向北
    mode("logo")
    secHand=Turtle()
    makeHand("secHand", 125)
    secHand.shape("secHand")
    minHand=Turtle()
    makeHand("minHand", 130)
    minHand.shape("minHand")
    hurHand=Turtle()
    makeHand("hurHand", 90)
    hurHand.shape("hurHand")
    #shapesize第一个参数没看到什么用,第二个参数表示几倍的长度,第3个参数表示3倍的宽度
    #speed(0)是最快
    for hand in secHand, minHand, hurHand:
        hand.shapesize(1,1,3)
        hand.speed(0)
    #建立并输出文字的turtle对象,printer对象只是显示文字不显示路径,所以一直是penup和hideturtle
    printer=Turtle()
    printer.hideturtle()
    printer.penup()

def Week(t):
    week=["星期一","星期二","星期三","星期四","星期五","星期六","星期七"]
    return week[t.weekday()]

def Day(t):
    return "%s %d %d" %(t.year,t.month,t.day)

def Tick():
    t=datetime.today()
    second=t.second+t.microsecond*0.000001
    minute=t.minute+t.second/60.0
    hour=t.hour+t.minute/60.0
    secHand.setheading(second*6)
    minHand.setheading(minute*6)
    hurHand.setheading(hour*30)

    tracer(False)
    printer.fd(70)
    printer.write(Week(t),align="center",font=("Courier", 14, "bold"))
    printer.back(130)
    printer.write(Day(t),align="center",font=("Courier", 14, "bold"))
    printer.home()
    tracer(True)

    ontimer(Tick,100)#100ms后继续调用Tick

def main():
    #关闭动画
    tracer(False)
    init()
    setupClock(200)
    #开启动画
    tracer(True)
    Tick()
    done()
main()
Python turtle库入门小练习_第5张图片

你可能感兴趣的:(Python,GUI与图像处理)