Python turtle库,库的引用、基本使用方法,tutle库练习(画圆、画角、画线条、五星红旗),使用rgb颜色,turtle绘画结束后,画布不消失的三种方法

Python学习总结–turtle库

​ turtle库,又被称为海龟,是能够进行绘图操作的一个标准库,包含许多用来图形绘制的方法。

在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:标原点(位置),面朝x轴正方向(方向),turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态。

​ 使用Python中的turtle库不需要特别的准备。要使用turtle库,你需要确保你的Python环境已经安装,并知道如何导入和使用turtle库。

一、库的引用

如python中的其他标准库和三方库一般,想要使用,需在程序开始处进行库的引用,引用方式主要有以下几种:

1、import turtle:直接引入对应的库

备注:使用这种方式引入库,那么在对turtle库中的函数进行调用时,需要使用这种形式:turtle. 函数名()

例如:

# circle()是turtle库中的一个用来绘制圆的函数

import turtle
turtle. circle(100)

2、from turtle import *:直接从turtle库中引入其所有的函数

备注:在对turtle库中的函数进行调用时,函数名前不用加turtle库名,即使用这种形式:函数名()

例如:

from turtle import *

circle(100)    #直接调用

3、import turtle as t:直接引入库,并给库取一个别名

例如:

import turtle as t

t. circle(100)   #画一个圈

备注:这种方式与方式一很像,在需要多次调用turtle库的函数时,可使用别名简化代码

二、turtle库的基本使用

1、窗体函数:

​ 1)设置窗口的函数turtle. setup(width,height,starts,starty)

​ 作用:设置绘图窗口的宽高和位置

​ 其中:

width:表示绘图窗口的宽度,值是整数,表示的是像素值;值是小数,表示窗口宽度与屏幕的比例。

height:表示绘图窗口的高度,值是整数,表示的是像素值;值是小数,表示窗口高度与屏幕的比例。

startx:表示绘图窗口左侧与屏幕左侧的像素距离。若不填,默认窗口位于屏幕水平居中。

starty:表示绘图窗口顶部与屏幕顶部的像素距离。若不填,默认窗口位于屏幕垂直居中。

​ 2)画布背景色设置:turtle. bgcolor("red")

​ 3)画笔上箭头的隐藏与显示**:

turtle. hideturtle() 隐藏

turtle. showturtle() 显示

​ 4)设置画笔的移动速度turtle. speed(n) 设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2、画笔状态的函数:有多种,具体见下述

​ 1)提起及放下画笔的函数:这是两个函数,一般都配套使用。

​ 完整形式:

turtle. penup()   提起画笔

turtle. pendown()  放下画笔

作用:提起画笔后,移动画笔或者绘图,均不会在画布上留下痕迹。放下画笔后,移动画笔或者绘图,均会在画布上留下痕迹。

​ 2)画笔状态设置:

turtle. pensize(数字) :画笔粗细

turtle.pencolor('颜色'):画笔颜色

turtle.fillcolor('颜色'):画笔填充颜色

也可以混合使用:turtle. pen(pensize,pencolor,fillcolor)

例如:

(1)turtle. pensize(30):设置画笔的粗细

(2)turtle. color(pencolor,fillcolor):设置画笔的颜色及填充颜色

(3)turtle. fillcolor("blue"):设置图案的填充颜色

3、画笔状态设置:图案颜色填充函数:

turtle. begin_fill() :开始填充

turtle. end_fill():结束填充

具体使用场景如下:

#绘制的一个半径为100内部为蓝色的圆
import turtle as turtle

turtle. fillcolor("blue")
turtle. begin_fill()
turtle. circle(50)
turtle. end_fill()

结果:
在这里插入图片描述
4、画笔状态设置:画笔移动操作的函数:

1)直线运动操作的函数:

​ (1) turtle.forward(200)

​ 作用:往前画长度为200像素的直线(画笔初始方向默认为水平向右)

​ (2) turtle.backward(300)

​ 作用:往后画长度为300像素的直线(画笔方向保持不变)

2)改变画笔方向的函数:

​ (1) turtle.right(90)

​ 作用:画笔沿顺时针方向旋转90度

​ (2) turtle.left(90)

​ 作用:画笔沿逆时针方向旋转90度

​ (3) turtle.setheading(90)

​ 作用:画笔沿逆时针方向旋转90度

备注:括号里面的参数可正可负,正如上述,负为反方向

3)改变画笔当前位置的函数:

​ (1) turtle.goto(x,y)

​ 作用:将画笔从当前位置移动到(x,y)处,x、y为具体像素坐标值(以初始点为坐标原点)

​ (2) turtle.setpos(x,y)

​ 作用:将画笔从当前位置移动到(x,y)处,x、y为具体像素坐标值(以初始点为坐标原点)

​ (3) turtle. setx(x)

​ 作用:将画笔从当前位置水平移动到横坐标为x处,x为具体像素坐标值(纵坐标不变)

​ (4) turtle. set y(y)

​ 作用:将画笔从当前位置竖直移动到纵坐标为y处,y为具体像素坐标值(横坐标不变)

5、画布的全局操作:

​ 1)turtle. clear()

​ 作用:清空turtle画布,但是turtle画笔的位置和状态不变

​ 2)turtle. reset()

​ 作用:清空并复位turtle画布窗口,重置画笔状态(但是画布背景色不变)

​ 3)turtle. undo()

​ 作用:撤销上一个turtle绘图动作

​ 4)turtle. isvisible()

​ 作用:返回当前turtle画布是否可见,若可见,返回True,否则返回False

三、练习

1. 画圆–练习奥运五环

在这里插入图片描述
代码:

#一般形式
import turtle as t #召唤海龟先生
t.pensize(5) #画笔粗细

#第一个圈
t.color("black") #把画笔颜色改为黑色
t.circle(50)     #画圆
#第二个圆
t.color("red")#把画笔颜色改为黑色
t.penup()#抬笔
t.goto(-100,0)#移动到-100,0
t.pendown() #落笔
t.circle(50)
#第三个圆
t.color("blue")
t.penup()
t.goto(100,0)
t.pendown()
t.circle(50)
#第四个圆
t.color("green")
t.penup()
t.goto(-50,-50)
t.pendown()
t.circle(50)
#第五个圆
t.color("yellow")
t.penup()
t.goto(50,-50)
t.pendown()
t.circle(50)

或者使用函数:定义drawCircle函数,使代码简约易理解

#函数形式
import turtle as t #召唤海龟先生
t.pensize(5)

def drawCircle(color,x,y):
    t.color(color)
    t.goto(x,y)
    t.pendown()
    t.circle(50)
    t.penup()
drawCircle("black",0,0)
drawCircle("red",-100,0)
drawCircle("blue",100,0)
drawCircle("green",-50,-50)
drawCircle("yellow",50,-50)

2. 画角

1)画正方形drawRectangle
  • 开始填充 .begin_fill()

  • 结束填充 end_fill()

  • 向右转 .right(度数)

  • 向左转 .left(度数)

  • 直走 .forward(xxx)

import turtle as t
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)

t.penup()
t.goto(-200,-100)

def draw_rectangle(side):
    t.pendown()
    for i in range(4):
        t.forward(side)
        t.right(90)
    t.penup()

draw_rectangle(50)

如图,画了两个正方形:
在这里插入图片描述

2)画三角形 drawTriangle

turtle.goto(x,y) 让画笔沿直线移动到坐标点(x,y)处

turtle.setpos(x,y) 与goto命令一样,作用也是让画笔沿直线移动到坐标点(x,y)处

turtle.sex(x) 只改变x坐标,让画笔产生移动

turtle.sex(y) 只改变y坐标,让画笔产生移动

x,y=turtle.pos() 返回画笔当前位置的坐标

turtle.seth(degree) 用于设置画笔的方向,参数degree为画笔方向与海龟坐标系x轴正向的夹角度数。

import turtle as t
# 第一个三角形    原始的方式
t.color('dark green')
t.begin_fill()  #填充的起点
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.end_fill()   #填充的终点(闭合)

# 第二个三角形  加入for循环
t.penup() 
t.setpos(-100,-100)
t.pendown()
t.color('red')
t.begin_fill() 
for i in range(3):
    t.forward(100)
    t.left(120)
t.end_fill()
 
# 第三个三角形   利用函数+for循环
t.penup() 
t.setpos(200,-100)

def draw_trangle():    #函数形式
    t.pendown()
    t.color('black')
    t.begin_fill() 
    for i in range(3):
        t.forward(100)
        t.left(120)
    t.end_fill()

draw_trangle()

如图,画了三个三角形:
在这里插入图片描述

3)画多边形 drawPolygon

注意点:熟知内角和的度数。【多边形的内角及内角和 = (n-2)*180°】

  • 五角形
  • 六角形
import turtle as t
# 第一个五角形
t.color('red')
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)

# 第二个五角形
t.penup()
t.setpos(-200,-200)
t.pendown()
t.color('green')
t.begin_fill()

for i in range(5):
    t.forward(100)
    t.left(72)
t.end_fill()
    
t.penup()
t.setpos(200,-200)

# 第三个五角形
def draw_pentagon():
    t.pendown()
    t.color('green')
    t.begin_fill()
    for i in range(5):
        t.forward(100)
        t.left(72)
    t.end_fill()

draw_pentagon()

t.exitonclick()   #点击画布时,画布才消失

如图,画了三个五边形:
在这里插入图片描述

4)画五角星形drawEive-pointedstar

五角星的角的度数 36°

import turtle as t
t.color('dark green')
t.begin_fill()
for i in range(5):
	t.forward(100)
	t.right(144)
t.end_fill()

如图:
在这里插入图片描述

另一种方式:

import turtle as t
t.color('dark green')
t.begin fill()
forin range(5):
	t.forward(30)
	t.left(72)
	t.forward(30)
	t.right (144)
t.end fill()
5)画五星红旗
  • 新建一个窗口:t.Screen()

  • 让画笔沿直线移动到坐标点(x,y)处:.setpos(x.y)

  • 设置背景颜色:Object.bgcolor(color)

  • 设置窗口宽、高:Obiect.setup(width,height)

  • 隐藏画笔箭头:setheading(degre)

'''
1.画五星红旗D底色为红色 矩形框宽和高比为3比2
2.确定几颗星星的位置
3.小星星旋转一个角度指向大星星
'''

import turtle as t

window = t.Screen()
window.setup(900,600)
window.bgcolor('red')

t.speed(0)
map = t.Screen()
map.setup(900,600)
map.bgcolor('red')

# t.screensize(800,600)
# t.bgcolor('red') 

def draw_5pointedstar(x,y,degree,side):
    t.setpos(x,y)
    t.setheading(degree)
    t.pendown()
    t.color('yellow')
    t.begin_fill()
    for i in range(5):
        t.forward(side)
        t.left(72)
        t.forward(side)
        t.right(144)
    t.end_fill()
    t.penup()
    
#大五星
t.penup ()
draw_5pointedstar(-390,180,0,65)
#右上第1颗小五角星
draw_5pointedstar(-170,260,330,15)
#右上第2颗小五角星
draw_5pointedstar(-120,170,30,15)
#第3颗小五角星
draw_5pointedstar(-120,100,0,15)
#第4颗小五角星
draw_5pointedstar(-170,60,330,15)

t.hideturtle()

t.exitonclick()

爱我中华!
在这里插入图片描述

6)叠边形
import turtle as t
t.pensize(5)
t.pencolor("black")
for i in range(9):  #一共有9条边,顾循环9次
    t.forward(100)
    t.left(80) #叠边形的内角为100,偏移角度为80

t.exitonclick()

如图:
在这里插入图片描述

3. 线条艺术

1)贝壳
#贝壳
import turtle as t
t.speed(15)     #调整画笔的速度
for x in range(20):
    t.circle(x*3)

t.exitonclick()

如图:
在这里插入图片描述

2)让贝壳旋转起来
# 利用for循环
import turtle as t
t.speed(20)
for x in range(30):
    t.circle(x*3)
    t.left(90)      #旋转90°

t.exitonclick()


#或者利用while循环

如图:
在这里插入图片描述

3)迷宫
import turtle as t
t.speed(100)
X = 0
while X < 50 :
    t.forward(X * 3)
    t.left(90)
    X+=1
t.exitonclick()

如图:
在这里插入图片描述

4.色彩

1)使用RGB表达色彩

这里用到了随机函数random.randint(),使用前需要导入 import random

import turtle as t
import random    #导入

screen = t.Screen()     #创建新的窗口
screen.colormode(255)
t.speed(20)
t.pensize(2)

for x in range(50):         #利用随机函数随机获取rgb三种颜色
	r = random.randint(0,255)
	g = random.randint(0,255)
	b = random.randint(0,255)
	t.color(r,g,b)
	t.circle(x)
	t.left(90)
t.exitonclick()

如图:
在这里插入图片描述

2)如何适用多种颜色?
import turtle as t
window = t.Screen()
window.bgcolor('black')

# sides = eval(input("输入要绘制的边的数目 (2-6) !"))
sides = 6
t.speed(20)
colors =["red","yellow","green","blue","orange","purple"]
for x in range(100):
    t.pencolor(colors[x % sides])
    t.forward(x * 3 / sides + x)
    t.left(360 / sides + 1)
    t.width(x* sides / 200)
    
t.exitonclick()

如图:
在这里插入图片描述

三、turtle绘画结束后,画布不消失的三种方法

在pycharm/vscode中绘图完毕,画布总会消失。有三种方法能让turtle绘画结束后画布不消失,如下最后三个语句:`

  • turtle.exitonclick() #点击画面时画布才会消失
  • turtle.mainloop() #这种方法会使得后面的代码无法运行
  • turtle.done() #这种方法会使得后面的代码无法运行