python Turtle库

Turtle库是Python的绘图函数库.因名思义,Turtle小乌龟,慢慢爬,爬出轨迹,一步一个脚印,这个小乌龟有很多功能,如控制爬行速度,颜色填充,运动方向,角度等。

  • 导入库
from turtle import * 
  • 画布(convas)
    画布即绘图区,有尺寸,背景色,初始位置属性。
序号 方法 描述
1 screensize(canvwidth=None, canvheight=None, bg=None) canvwidth画布宽度,canvheight画布高度,bg画布背景色,默认(400, 300)白色背景
2 setup(width, height) width和height为整数时,表示像素,为小数时表示占屏幕比例
3 setup(startx, starty) 画布左上角的坐标,为空时,画布在屏幕中央,画布对角线交点为原点(0,0)
4 setup(width, height, startx, starty) 画布大小及初始位置

**常用的几个方法,写在下边**

import turtle
turtle.screensize(500,1000,'green')#宽度,高度,背景色
import turtle
turtle.setup(500,400,200,200)
#输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例。(startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。
turtle.bgcolor('yellow')#背景颜色填充
  • 画笔(pen)
    画笔有颜色,宽度及运动速度的属性.
序号 方法 描述
1 pensize() 画笔宽度
2 pencolor() 画笔颜色,颜色字符串"red",“green”, "blue"或者RGB元组(255, 255, 255)
3 speed() 画笔运动速度
  • 画笔绘图
序号 方法 描述
1 forward(distance)=fd(distance) 画笔移动distance像素长度
2 backward(distance)=bk(distance)=back(distance) 画笔反方向移动distance像素长度
3 right(degree)=rt(angle) 顺时针移动的度数
4 left(degree)=lt(angle) 逆时针移动的度数
5 pendown() 移动时绘制图形,默认绘制
6 goto(x, y) 画笔移动到坐标(x, y)的位置
7 penup() 提起画笔,移动到指定位置,不绘制曲线
8 circle(radius, extent=None, steps=None) 绘制圆,radius为半径,extent为弧度,steps为内切多边形边数,半径为正,逆时针绘制圆;半径为负,顺时针绘制圆;
9 setx() x轴移动到指定位置
10 sety() y轴移动到指定位置
11 setheading(angle)=seth(angle) 设置画笔的朝向为angle角度
12 home() 设置当前画笔位置为原点,画笔朝向东
13 dot( r ) 绘制一个指定指定和颜色的原点
14 fillcolor(colorstring) 绘制图形填充颜色
15 color(color1, color2) color1为画笔颜色,color2为填充颜色
16 filling() 返回是否在填充状态
17 begin_fill() 开始填充
18 end_fill() 结束填充
19 hideturtle() 隐藏画笔turtle形状
20 showturtle() 显示画笔turtle形状
  • 画笔功能操作
序号 方法 描述
1 clear() 清空turtle窗口,保持turtle位置和状态
2 reset() 重置turtle窗口
3 undo() 撤销上一个turtle动作
4 isvisible() 返回当前turtle是否可见
5 stamp() 复制当前图像
6 write(s[, font=(“font-name”, font_size, “font_type”)]) 写文本,s为文本内容,font是字体参数,分别为字体名称,大小和类型,为可选项
7 mainloop(), done() 启动事件循环,解决一闪而过,必须是程序最后一句
8 mode(mode=None) 画笔模式standard,log和world模式,初始画笔standard逆时针向右(东);初始画笔logo顺时针向上(北)
9 delay(delay=None) 延迟绘图时间,单位是毫秒
10 begin_poly() 开始记录多边形顶点,当前画笔位置是多边形的第一个顶点
11 end_poly() 停止记录多边形的顶点,当前画笔位置是多边形最后一个顶点,与第一个顶点相连
12 get_ploy() 返回最后记录的多边形

习题练习

  • 绘制五角星,外框为黄色,填充为红色,要求必须根正苗红,始终跟党走
import turtle
turtle.screensize(800,800,'black')
turtle.fillcolor('red')
turtle.goto(-200,0)
turtle.pendown()
turtle.begin_fill()
turtle.pencolor('yellow')
turtle.pensize(10)
for i in range(5):
        turtle.fd(400)
        turtle.right(144)
turtle.end_fill()
turtle.penup()

输出结果为:

结合random()函数绘制一个雪景图,“雪景”图形艺术背景为黑色,分为上下两个区域,上方是漫天彩色雪花,下方是由远及近的灰色横线渐变。该图运用了随机元素,如雪花位置、颜色、大小、花瓣数目、地面灰色线条长度、线条位置等,需要使用turtle库和random库。

绘制分为三个步骤

    1. 构建图的背景
    1. 绘制雪花效果
    1. 绘制雪地效果

第一步,构建图的背景
设定窗体大小为800x600像素,窗体颜色为black。然后,定义上方雪花绘制函数drawSnow()和下方雪地绘制函数drawGround()。

def main():
        drawSnow()
        drawGround()
        
if __name__ == '__main__':
        main()

第二步,绘制雪花效果。
为体现艺术效果,drawSnow()函数首先隐藏turtle画笔、设置画笔大小、绘制速度,然后使用for循环绘制100朵雪花。雪花大小snowsize、雪花花瓣数dens都分别设定为一定数值范围随机数。最后通过for循环绘制出多彩雪花。

import random
import turtle

turtle.screensize(1000,1000,'black')

def drawSnow():
        turtle.hideturtle()
        turtle.pensize(2)
        turtle.Turtle().screen.delay(0)
        for i in range(300):
                r,g,b = random.random(),random.random(),random.random()
                turtle.pencolor(r,g,b)
                turtle.penup()
                turtle.setx(random.randint(-480,480))
                turtle.sety(random.randint(-100,480))
                dens = random.randint(6,8)
                snowsize = random.randint(10,14)
                turtle.pendown()
                for j in range(dens):       
                        turtle.fd(snowsize)
                        turtle.bk(snowsize)
                        turtle.right(360/dens)
                   
def main():
        drawSnow()
        drawGround()
        
if __name__ == '__main__':
        main()

第三步,绘制雪地效果。drawGround()函数使用for循环绘制地面400个
小横线,画笔大小pensize、位置坐标x、y、线段长度均通过randint()函数作为随机数产生。

 def drawGround():
        turtle.penup()
        turtle.hideturtle()
        turtle.pensize(10)
        for i in range(900):
                r,g,b = random.random(),random.random(),random.random()
                turtle.pencolor(r,g,b)
                x = random.randint(-480,480)
                y = random.randint(-480,-160)
                turtle.goto(x,y)
                turtle.pendown()
                turtle.fd(random.randint(10,14))
                turtle.penup()

完整程序为:

import random
import turtle

turtle.screensize(1000,1000,'black')

def drawSnow():
        turtle.hideturtle()
        turtle.pensize(2)
        turtle.Turtle().screen.delay(0)
        for i in range(500):
                r,g,b = random.random(),random.random(),random.random()
                turtle.pencolor(r,g,b)
                turtle.penup()
                turtle.setx(random.randint(-480,480))
                turtle.sety(random.randint(-100,480))
                dens = random.randint(6,8)
                snowsize = random.randint(10,14)
                turtle.pendown()
                for j in range(dens):       
                        turtle.fd(snowsize)
                        turtle.bk(snowsize)
                        turtle.right(360/dens)
                        
def drawGround():
        turtle.penup()
        turtle.hideturtle()
        turtle.pensize(10)
        for i in range(900):
                r,g,b = random.random(),random.random(),random.random()
                turtle.pencolor(r,g,b)
                x = random.randint(-480,480)
                y = random.randint(-480,-160)
                turtle.goto(x,y)
                turtle.pendown()
                turtle.fd(random.randint(10,14))
                turtle.penup()
                

def main():
        drawSnow()
        drawGround()
        
if __name__ == '__main__':
        main()

输出效果:
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容