Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。
绘制动态钟表的基本思路如下(面向对象的编程):
使用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
|
# -*- coding: utf-8 -*- """ Created on Fri Jan 12 10:43:55 2018 @author: Administrator """ 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" , 125 ) mkhand( "minhand" , 130 ) 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 + second / 60.0 sechand.setheading( 6 * second) 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.home() tracer( True ) ontimer(tick, 100 ) #100ms后继续调用tick def main(): tracer( False ) init() setupclock( 160 ) tracer( True ) tick() mainloop() main() |
运行结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_40006058/article/details/79042230