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