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”)并执行重置 如果没有给出模式,则返回当前模式
|
|||||||||
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()
绘制的效果:
*** | 以上内容仅为学习参考、学习笔记使用 | ***