Python标准库:turtle绘图库

turtle 库

turtle 库是 Python 的标准库之一,是 Python 的基础绘图库

也就是说,turtle 库就是用来绘制基本图形的

而 turtle 又有 “海龟” 的意思,所以也被称为 “海龟” 库

我们可以想象一只海龟,在位于显示器的窗体上游走,它游走的轨迹就形成了绘制的图形

海龟的运动是由程序控制的,它可以变换颜色,改变尺寸、大小等

画笔

在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝X轴正方向小乌龟

turtle 绘图中,就是使用位置方向描述小乌龟(画笔)的状态

我们可以通过画笔的属性更改画笔的宽度、颜色以及移动速度

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

  • turtle.pencolor():没有参数传入,返回当前画笔颜色;传入参数设置画笔颜色

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

绘图命令

画笔运动命令:

命令

说明

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)

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

画笔控制命令:

命令

说明

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 形状

 全局控制命令:

命令

说明

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参数也是可选项

 其他命令:

命令

说明

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

返回最后记录的多边形

🌰:绘制时钟

  1 """ 用Python实现的实时时钟 """
  2 
  3 #导入模块
  4 import turtle
  5 from datetime import * 
  6 
  7 
  8 # 绘图窗口设置
  9 def Skip(step):
 10     turtle.penup()
 11     turtle.forward(step)
 12     turtle.pendown()
 13  
 14 
 15 # 绘制指针长度
 16 def mkHand(name, length):
 17     # 清空窗口,重置状态
 18     turtle.reset()
 19     Skip(-length * 0.1)
 20 
 21     # 开始记录多边形的顶点
 22     turtle.begin_poly()
 23     turtle.forward(length * 1.1)
 24 
 25     # 停止记录多边形的顶点
 26     turtle.end_poly()
 27 
 28     # 返回最后记录的多边形。
 29     handForm = turtle.get_poly()
 30     turtle.register_shape(name, handForm)
 31  
 32 
 33 # 时钟初始化
 34 def Init():
 35     # 秒针、分针、时针、文字
 36     global secHand, minHand, hurHand, printer
 37 
 38     # 设置turtl模式:logo:向上(北);顺时针
 39     turtle.mode("logo")
 40 
 41     # 建立三个指针Turtle并初始化
 42     # 设置三个指针的长度:秒、分、时针
 43     mkHand("secHand", 135)
 44     mkHand("minHand", 125)
 45     mkHand("hurHand", 90)
 46     # 初始化秒针
 47     secHand = turtle.Turtle()
 48     secHand.shape("secHand")
 49     # 初始化分针
 50     minHand = turtle.Turtle()
 51     minHand.shape("minHand")
 52     # 初始化时针
 53     hurHand = turtle.Turtle()
 54     hurHand.shape("hurHand")
 55    
 56     for hand in secHand, minHand, hurHand:
 57         hand.shapesize(1, 1, 3)
 58         hand.speed(0)
 59 
 60     # 显示文字的Turtle
 61     printer = turtle.Turtle()
 62     # 隐藏画笔的形状
 63     printer.hideturtle()
 64     printer.penup()
 65 
 66     
 67 # 绘制时钟
 68 def SetupClock(radius):
 69     # 绘制时钟的外框
 70     turtle.reset()
 71     turtle.pensize(7)
 72 
 73     for i in range(60):
 74         Skip(radius)
 75         # 时钟整点数值
 76         if i % 5 == 0:
 77             turtle.forward(20)
 78             Skip(-radius - 20)         
 79             Skip(radius + 20)
 80             # 数值:12点
 81             if i == 0:
 82                 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
 83             # 数值:6点
 84             elif i == 30:
 85                 Skip(25)
 86                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 87                 Skip(-25)
 88             # 数值:5、7点
 89             elif (i == 25 or i == 35):
 90                 Skip(20)
 91                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 92                 Skip(-20)
 93             # 数值:1、2、3、4、8、9、10、11点
 94             else:
 95                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 96 
 97             Skip(-radius - 20)
 98         # 时钟刻度
 99         else:
100             turtle.dot(5)
101             Skip(-radius)
102 
103         turtle.right(6)
104 
105         
106 # 设置时钟星期
107 def Week(t):   
108     # 周一/周日
109     week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]
110     # 返回星期
111     return week[t.weekday()]
112 
113 
114 # 设置时钟日期
115 def Date(t):
116     #
117     y = t.year
118     #
119     m = t.month
120     #
121     d = t.day
122     # 返回日期:年-月-日
123     return "%s-%d-%d" % (y, m, d)
124  
125 
126 # 绘制时钟指针
127 def Tick():
128     # 获取当前时间
129     t = datetime.today()
130     # 时间:秒
131     second = t.second + t.microsecond * 0.000001
132     # 时间:分
133     minute = t.minute + second / 60.0
134     # 时间:时
135     hour = t.hour + minute / 60.0
136     # 设置秒针一周 = 6° * 60秒
137     secHand.setheading(6 * second)
138     secHand.color("red")
139     # 设置分针一周 = 6° * 60分
140     minHand.setheading(6 * minute)
141     # 设置时针一周 = 30° * 12时
142     hurHand.setheading(30 * hour)
143 
144     turtle.tracer(False) 
145     
146     # 显示星期
147     printer.forward(50)
148     printer.write(Week(t), align="center", font=("Courier", 20, "bold"))
149     # 显示日期
150     printer.back(130)
151     printer.write(Date(t), align="center", font=("Courier", 20, "bold"))
152 
153     printer.home()
154     turtle.tracer(True)
155     # 间隔100ms后继续调用tick绘制时钟指针
156     turtle.ontimer(Tick, 100)
157  
158 
159 def main():
160     # 关闭绘制动画
161     turtle.tracer(False)
162     # 初始化设置
163     Init()
164     # 绘制时钟
165     SetupClock(160)
166     # 打开绘制动画
167     turtle.tracer(True)
168     # 绘制指针
169     Tick()
170     # 启动循环事件
171     turtle.mainloop()
172  
173 
174 if __name__ == "__main__":
175 
176     main()

绘制的效果:

 

 

 

 

 

*** |  以上内容仅为学习参考、学习笔记使用  | ***

posted @ 2021-11-01 16:29  Mr.Cat~  阅读(939)  评论(0编辑  收藏  举报