安装
pip install turtle
坐标系
绝对坐标:就是标准的xOy坐标系,上y右x,中央点是(0,0)
standard模式下(默认):头朝的方向就是前方:如当龟头朝右时,右侧就为前方。开始默认头朝右.
形状
时钟
调试方法
import turtle
from datetime import *
turtle.tracer(True) # 不显示绘制的过程,直接显示绘制结果 ---调试时可以屏蔽,查看绘制过程
turtle.speed('slowest')
例子
时钟:
简单例子:
import turtle
# 实例化一个屏幕对象
screen = turtle.Screen()
# 把屏幕的背景颜色设置为黄色
screen.bgcolor('yellow')
# 实例化一个小乌龟,命名为baby,这也就是我们的画笔
baby = turtle.Turtle()
# 把画笔的笔尖形状设置为一只小乌龟
baby.shape('turtle')
# 画笔的颜色设为绿色
baby.color('green')
# 绘画速度设为最慢
baby.speed('slowest')
# 让笔离开屏幕,这样移动画笔只会改变位置,不会在屏幕上留下痕迹
baby.penup()
# 表盘被均分为12等份,所以这里要开启一个12次的循环,完成对表盘的绘制
for _ in range(12):
# 不留痕迹地向前移动90个单位
baby.forward(90)
# 把笔放在屏幕上
baby.pendown()
# 向前画一条长度为30个单位的线段
baby.forward(30)
# 把笔抬起来
baby.penup()
# 不留痕迹地向前移动20个单位
baby.forward(20)
# 把小乌龟的形象印在屏幕上(此时的小乌龟当成一个印章来用)
baby.stamp()
# 向后退140个单位,回到了起点
baby.backward(140)
# 顺时针旋转30度(360度的12分之1)
baby.right(30)
baby.penup()
baby.forward(280)
# 表盘被均分为12等份,所以这里要开启一个12次的循环,完成对表盘的绘制
for _ in range(12):
# 不留痕迹地向前移动90个单位
baby.forward(90)
# 把笔放在屏幕上
baby.pendown()
# 向前画一条长度为30个单位的线段
baby.forward(30)
# 把笔抬起来
baby.penup()
# 不留痕迹地向前移动20个单位
baby.forward(20)
# 把小乌龟的形象印在屏幕上(此时的小乌龟当成一个印章来用)
baby.stamp()
# 向后退140个单位,回到了起点
baby.backward(140)
# 顺时针旋转30度(360度的12分之1)
baby.right(30)
# # 下面是画分针和时针
# # 把笔放下
# baby.pendown()
# # 把笔变粗一点
# baby.pensize(3)
# # 向后移动,画一条长度为60个单位的线段,这就是时针
# baby.backward(60)
# # 向前移动,回到原点
# baby.forward(60)
# # 逆时针旋转90度
# baby.left(90)
# # 向前移动,画一条长度为80个单位的线段,这是分针
# baby.forward(80)
# 全部内容都画完了,小乌龟隐身,深藏功与名
baby.hideturtle()
# 调用屏幕对象的mainloop方法,这样,在绘图结束之后屏幕不会突然消失,
# 而是静静等待我们手动关闭
screen.mainloop()
演示效果:
时区
from pytz import all_timezones
from pytz import common_timezones
import datetime
import pytz
data = datetime.datetime.now(pytz.timezone('PRC')).strftime("%Y-%m-%d_%H:%M")
print(data)
#print(all_timezones())
#print(common_timezones())
dd = datetime.datetime.now(pytz.timezone('America/Manaus')).strftime("%Y-%m-%d_%H:%M")
print(dd)
## Europe/London
dd = datetime.datetime.now(pytz.timezone('Europe/London')).strftime("%Y-%m-%d_%H:%M")
print(dd)
时钟:
# 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(1, 1, 3)
hand.speed(0)
# 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)
Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 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):
y = t.year
m = t.month
d = t.day
return "%s %d%d" % (y, m, d)
def Tick():
# 绘制表针的动态显示
t = 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()
演示效果: