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