导入需要的包设置变量
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
|
from datetime import datetime from pygame. locals import * import sys, math, pygame def print_text(font, x, y, text, color = ( 255 , 255 , 255 )): img_text = font.render(text, True , color) screen.blit(img_text, (x, y)) def wrap_angle(angle): return angle % 360 pygame.init() screen = pygame.display.set_mode(( 600 , 500 )) pygame.display.set_caption( "在线时钟" ) # 设置字体 font1 = pygame.font.SysFont( "方正粗黑宋简体" , 24 ) orange = 220 , 180 , 0 white = 255 , 255 , 255 yellow = 255 , 255 , 0 pink = 255 , 100 , 100 pos_x = 300 pos_y = 250 radius = 250 angle = 360 |
这里绘制一个600*500的屏幕,设置圆心位置及其半径。根据时间的不同,计算弧度,通过三角函数计算出对应的坐标,从圆心的位置绘制出时针的线条。
写数字
通过循环1到12,将数字写在对应的位置上,-10 和对应的字体微调使其更加对正
1
2
3
4
5
|
for n in range ( 1 , 13 ): angle = math.radians(n * ( 360 / 12 ) - 90 ) x = math.cos(angle) * (radius - 20 ) - 10 y = math.sin(angle) * (radius - 20 ) - 10 print_text(font1, pos_x + x, pos_y + y, str (n)) |
绘制时针
这里通过时间计算出对应的角度,然后从圆心到指定位置画时针。
1
2
3
4
5
6
|
hour_angle = wrap_angle(hours * ( 360 / 12 ) - 90 ) + wrap_angle(minutes * ( 360 / 60 ) - 90 ) / 60 hour_angle = math.radians(hour_angle) hour_x = math.cos(hour_angle) * (radius - 80 ) hour_y = math.sin(hour_angle) * (radius - 80 ) target = (pos_x + hour_x, pos_y + hour_y) pygame.draw.line(screen, pink, (pos_x, pos_y), target, 25 ) |
完整代码
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
|
from datetime import datetime from pygame. locals import * import sys, math, pygame def print_text(font, x, y, text, color = ( 255 , 255 , 255 )): img_text = font.render(text, True , color) screen.blit(img_text, (x, y)) def wrap_angle(angle): return angle % 360 pygame.init() screen = pygame.display.set_mode(( 600 , 500 )) pygame.display.set_caption( "在线时钟" ) # 设置字体 font1 = pygame.font.SysFont( "方正粗黑宋简体" , 24 ) orange = 220 , 180 , 0 white = 255 , 255 , 255 yellow = 255 , 255 , 0 pink = 255 , 100 , 100 pos_x = 300 pos_y = 250 radius = 250 angle = 360 while True : for event in pygame.event.get(): if event. type = = QUIT: pygame.quit() sys.exit() keys = pygame.key.get_pressed() if keys[K_ESCAPE]: pygame.quit() sys.exit() screen.fill(( 154 , 205 , 255 )) pygame.draw.circle(screen, white, (pos_x, pos_y), radius, 6 ) for n in range ( 1 , 13 ): angle = math.radians(n * ( 360 / 12 ) - 90 ) x = math.cos(angle) * (radius - 20 ) - 10 y = math.sin(angle) * (radius - 20 ) - 10 print_text(font1, pos_x + x, pos_y + y, str (n)) today = datetime.today() hours = today.hour % 12 minutes = today.minute seconds = today.second hour_angle = wrap_angle(hours * ( 360 / 12 ) - 90 ) + wrap_angle(minutes * ( 360 / 60 ) - 90 ) / 60 hour_angle = math.radians(hour_angle) hour_x = math.cos(hour_angle) * (radius - 80 ) hour_y = math.sin(hour_angle) * (radius - 80 ) target = (pos_x + hour_x, pos_y + hour_y) pygame.draw.line(screen, pink, (pos_x, pos_y), target, 25 ) min_angle = wrap_angle(minutes * ( 360 / 60 ) - 90 ) min_angle = math.radians(min_angle) min_x = math.cos(min_angle) * (radius - 60 ) min_y = math.sin(min_angle) * (radius - 60 ) target = (pos_x + min_x, pos_y + min_y) pygame.draw.line(screen, orange, (pos_x, pos_y), target, 12 ) sec_angle = wrap_angle(seconds * ( 360 / 60 ) - 90 ) sec_angle = math.radians(sec_angle) sec_x = math.cos(sec_angle) * (radius - 40 ) sec_y = math.sin(sec_angle) * (radius - 40 ) target = (pos_x + sec_x, pos_y + sec_y) pygame.draw.line(screen, yellow, (pos_x, pos_y), target, 6 ) pygame.draw.circle(screen, white, (pos_x, pos_y), 20 ) print_text(font1, 0 , 0 , str (hours) + ":" + str (minutes) + ":" + str (seconds)) pygame.display.update() |
以上就是Python绘制时钟的示例代码的详细内容,更多关于Python绘制时钟的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/qq_40801987/article/details/122870641