Python绘图Turtle库详解[通俗易懂]

Python绘图Turtle库详解[通俗易懂]Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。turtle绘图的基础知识:1.画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。…

大家好,又见面了,我是你们的朋友全栈君。

      Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

turtle绘图的基础知识:

1. 画布(canvas)

        画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

        设置画布大小

         turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

        如:turtle.screensize(800,600, “green”)

               turtle.screensize() #返回默认大小(400, 300)

        turtle.setup(width=0.5, height=0.75, startx=None, starty=None),参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。

        如:turtle.setup(width=0.6,height=0.6)

               turtle.setup(width=800,height=800, startx=100, starty=100)

 

2. 画笔

2.1 画笔的状态

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

2.2 画笔的属性

        画笔(画笔的属性,颜色、画线的宽度等)

        1) turtle.pensize():设置画笔的宽度;

        2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如”green”, “red”,也可以是RGB 3元组。

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

2.3 绘图命令

         操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)    画笔运动命令

命令

说明

turtle.forward(distance)

向当前画笔方向移动distance像素长度

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.left(degree)

逆时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

 

(2)     画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

 

(3)    全局控制命令

命令

说明

turtle.clear()

清空turtle窗口,但是turtle的位置和状态不会改变

turtle.reset()

清空窗口,重置turtle状态为起始状态

turtle.undo()

撤销上一个turtle动作

turtle.isvisible()

返回当前turtle是否可见

stamp()

复制当前图形

turtle.write(s [,font=(“font-name”,font_size,”font_type”)])

写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

 

(4)    其他命令

命令

说明

turtle.mainloop()或turtle.done()

启动事件循环 -调用Tkinter的mainloop函数。

必须是乌龟图形程序中的最后一个语句。

turtle.mode(mode=None)

设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

turtle.delay(delay=None)

设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()

开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()

停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()

返回最后记录的多边形。

 

3. 命令详解

        3.1 turtle.circle(radius, extent=None, steps=None)

        描述:以给定半径画圆

        参数:

        radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

        extent(弧度) (optional);

        steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50) # 整圆;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圆

 

实例:

1、太阳花

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# coding=utf-8

import turtle

import time

  

# 同时设置pencolor=color1, fillcolor=color2

turtle.color("red""yellow")

  

turtle.begin_fill()

for in range(50):

turtle.forward(200)

turtle.left(170)

turtle.end_fill()

  

turtle.mainloop()

  Python绘图Turtle库详解[通俗易懂]

 

 

2、五角星

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# coding=utf-8

import turtle

import time

  

turtle.pensize(5)

turtle.pencolor("yellow")

turtle.fillcolor("red")

  

turtle.begin_fill()

for in range(5):

  turtle.forward(200)

  turtle.right(144)

turtle.end_fill()

time.sleep(2)

 

turtle.penup()
turtle.goto(-150,-120)

turtle.pensize(5)
turtle.pencolor("yellow")
turtle.fillcolor("red")  
turtle.begin_fill()
for _ in range(5):
  turtle.fd(150)
  turtle.left(144)
turtle.end_fill()
time.sleep(2)

 

turtle.mainloop()

 

  

Python绘图Turtle库详解[通俗易懂]

 

3、时钟程序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

# coding=utf-8

  

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(113)

        hand.speed(0)

    

    # 建立输出文字Turtle

    printer = turtle.Turtle()

    # 隐藏画笔的turtle形状

    printer.hideturtle()

    printer.penup()

     

def SetupClock(radius):

    # 建立表的外框

    turtle.reset()

    turtle.pensize(7)

    for in range(60):

        Skip(radius)

        if % 5 == 0:

            turtle.forward(20)

            Skip(-radius - 20)

            

            Skip(radius + 20)

            if == 0:

                turtle.write(int(12), align="center", font=("Courier"14"bold"))

            elif == 30:

                Skip(25)

                turtle.write(int(i/5), align="center", font=("Courier"14"bold"))

                Skip(-25)

            elif (i == 25 or == 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):

    = t.year

    = t.month

    = t.day

    return "%s %d%d" % (y, m, d)

  

def Tick():

    # 绘制表针的动态显示

    = 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()

  

Python绘图Turtle库详解[通俗易懂]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133217.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hdfs常用操作命令

    hdfs常用操作命令hdfs常用操作命令

    2022年4月23日
    37
  • Python 实现毫秒级淘宝抢购脚本

    Python 实现毫秒级淘宝抢购脚本本篇文章主要介绍了Python通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,也可以抢聚划算的商品。博主不提供任何服务器端程序,也不提供任何收费抢购软件。该文章仅作为学习selenium框架的一个示例代码。该思路可运用到其他任何网站,京东,天猫,淘宝均可使用,且不属于外挂或者软件之类,只属于一个自动化点击工…

    2022年4月28日
    207
  • 安捷伦频谱仪操作手册_安捷伦频谱仪LAN设置

    安捷伦频谱仪操作手册_安捷伦频谱仪LAN设置频谱分析仪的基本使用方法一、使用前须知在使用频谱分析仪之前,有必要了解一下分贝(dB)和分贝毫瓦(dBm)的基本概念,下面作一简要介绍。1.分贝(dB)分贝是增益的一种电量单位,常用来表示放大器的放大能力、衰减量等,表示的是一个相对量,分贝对功率、电压、电流的定义如下:分贝数:101g(dB)分贝数=201g(dB)分贝数=201g(dB)例如:A功率比B功率大一倍,那么,101gA/B=1018…

    2022年8月11日
    5
  • laravel 验证码手机与提交手机的验证?

    laravel 验证码手机与提交手机的验证?

    2021年10月25日
    42
  • 永恒之蓝漏洞复现(MS17010)

    永恒之蓝漏洞复现(MS17010)永恒之蓝实验(MS17010)1.概念永恒之蓝是指2017年4月14日晚,黑客团体ShadowBrokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒。恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。2.什么是ARTA

    2022年5月2日
    52
  • JS数组合并(5种)

    JS数组合并(5种)前言项目过程中,经常会遇到JS数组合并的情况,时常为这个纠结。这里整理一下。简单而实用的for最容易想到的莫过于for了。会变更原数组,当然也可以写成生成新数组的形式。letarr=[1,2]letarr2=[3,4]for(letiinarr2){arr.push(arr2[i])}console.log(arr)//[1,2,3,4]arr.concat(arr2)会生成新的数组。letarr=[1,2]let

    2022年6月30日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号