Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。
本文介绍的turtle库对应的官方文档地址
绘制动态钟表的基本思路如下(面向对象的编程):
使用5个turtle对象
1个turtle:绘制外表盘
3个turtle:模拟表针行为
1个turtle:输出表盘上文字
根据实时时间使用ontimer()函数更新表盘画面,显示效果如下:
相关函数的使用在程序中进行了详细的注释,代码如下:
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
|
from turtle import *
from datetime import *
def Skip(step):
penup()
forward(step)
pendown()
def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
reset() #清空当前窗口,并重置位置等信息为默认值
Skip( - length * 0.1 )
begin_poly()
forward(length * 1.1 )
end_poly()
handForm = get_poly()
register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
mode( "logo" ) # 重置Turtle指向北
#建立三个表针Turtle并初始化
mkHand( "secHand" , 135 )
mkHand( "minHand" , 110 )
mkHand( "hurHand" , 90 )
secHand = Turtle()
secHand.shape( "secHand" )
minHand = Turtle()
minHand.shape( "minHand" )
hurHand = Turtle()
hurHand.shape( "hurHand" )
for hand in secHand, minHand, hurHand:
hand.shapesize( 1 , 1 , 3 )
hand.speed( 0 )
#建立输出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
#建立表的外框
reset()
pensize( 7 )
for i in range ( 60 ):
Skip(radius)
if i % 5 = = 0 :
forward( 20 )
Skip( - radius - 20 )
else :
dot( 5 )
Skip( - radius)
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) #设置朝向,每秒转动6度
minHand.setheading( 6 * minute)
hurHand.setheading( 30 * hour)
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.back( 50 )
printer.write( "i_chaoren" , align = "center" ,
font = ( "Courier" , 14 , "bold" ))
printer.home()
tracer( True )
ontimer(Tick, 1000 ) #1000ms后继续调用tick
def main():
tracer( False ) #使多个绘制对象同时显示
Init()
SetupClock( 160 )
tracer( True )
Tick()
mainloop()
if __name__ = = "__main__" :
main()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/i_chaoren/article/details/57474714