分析:import tkinter as tk import time # 创建主窗口 root = tk.Tk() root.title("时钟") # 创建画布 canvas = tk.Canvas(root, width=400, height=400) canvas.pack() # 绘制表盘 canvas.create_oval(50, 50, 350, 350, width=4) for i in range(12): x = 200 + 140 * (2 * i + 1) // 24 y = 200 - 140 * (2 * i + 1) % 24 canvas.create_text(x, y, text=str(i+1), font=("Arial", 14, "bold")) # 绘制指针 hour_hand = canvas.create_line(200, 200, 200, 100, width=8, capstyle="round") minute_hand = canvas.create_line(200, 200, 200, 50, width=5, capstyle="round") second_hand = canvas.create_line(200, 200, 200, 50, width=2, fill="red", capstyle="round") # 绘制电子时钟和日期、星期显示 time_label = tk.Label(root, font=("Arial", 32)) time_label.pack() date_label = tk.Label(root, font=("Arial", 16)) date_label.pack() # 更新时钟 def update_clock(): current_time = time.strftime("%H:%M:%S") current_date = time.strftime("%Y-%m-%d %A") time_label.config(text=current_time) date_label.config(text=current_date) hour, minute, second = time.localtime()[3:6] hour_angle = (hour % 12 + minute / 60) * 360 / 12 - 90 minute_angle = (minute + second / 60) * 360 / 60 - 90 second_angle = second * 360 / 60 - 90 canvas.coords(hour_hand, 200, 200, 200 + 80 * round(2 * cos(radians(hour_angle))), 200 - 80 * round(2 * sin(radians(hour_angle)))) canvas.coords(minute_hand, 200, 200, 200 + 120 * round(2 * cos(radians(minute_angle))), 200 - 120 * round(2 * sin(radians(minute_angle)))) canvas.coords(second_hand, 200, 200, 200 + 140 * round(2 * cos(radians(second_angle))), 200 - 140 * round(2 * sin(radians(second_angle)))) root.after(1000, update_clock) update_clock() # 运行主循环 root.mainloop()
时间: 2023-06-16 11:04:23 浏览: 442
这段代码是一个使用 tkinter 库绘制时钟的程序。它包含以下步骤:
1. 导入 tkinter 和 time 模块。
2. 创建主窗口和画布。
3. 在画布上绘制表盘和数字时针。
4. 创建三条指针,并设置它们的样式和颜色。
5. 创建两个标签,用于显示电子时钟和日期、星期。
6. 编写 update_clock() 函数,用于更新时钟和指针的位置。
7. 在 update_clock() 函数中,使用 time 模块获取当前时间,并计算出时针、分针和秒针的角度。
8. 使用 trigonometry 函数计算出指针的坐标,并将其更新到画布上。
9. 使用 root.after() 函数设置定时器,使程序每隔一秒钟更新一次时钟。
10. 运行主循环,等待用户操作。
总体来说,这是一个简单的 GUI 程序,用于演示 tkinter 库的使用和基本的时钟功能。
相关问题
时钟tkinter 自己设置表盘指针刻度代码加详细注释
好的,以下是一个自己设置表盘指针刻度的Tkinter时钟代码,并加上详细注释:
```python
import tkinter as tk
from math import cos, sin, pi
import time
# 创建主窗口
root = tk.Tk()
root.title("时钟")
# 创建标签,用于显示时间
time_label = tk.Label(root, font=("Arial", 80))
time_label.pack()
# 画表盘函数
def draw_clock():
# 获取画布大小
width = canvas.winfo_width()
height = canvas.winfo_height()
# 计算表盘半径和中心坐标
r = min(width, height) / 2 * 0.8
cx = width / 2
cy = height / 2
# 画表盘外圆
canvas.delete("clock") # 删除之前的表盘
canvas.create_oval(cx-r, cy-r, cx+r, cy+r, width=5, outline="black", tags="clock")
# 画表盘刻度
for i in range(12):
angle = pi / 6 * i # 计算刻度线的角度
x1 = cx + (r-20) * cos(angle)
y1 = cy + (r-20) * sin(angle)
x2 = cx + r * cos(angle)
y2 = cy + r * sin(angle)
canvas.create_line(x1, y1, x2, y2, width=5, tags="clock")
# 画表盘指针
# 计算指针位置
now = time.localtime()
hour_angle = pi / 6 * now.tm_hour + pi / 360 * now.tm_min
minute_angle = pi / 30 * now.tm_min
second_angle = pi / 30 * now.tm_sec
hour_length = r * 0.5
minute_length = r * 0.7
second_length = r * 0.9
# 画指针
# 时针
x = cx + hour_length * sin(hour_angle)
y = cy - hour_length * cos(hour_angle)
canvas.create_line(cx, cy, x, y, width=10, fill="red", tags="clock")
# 分针
x = cx + minute_length * sin(minute_angle)
y = cy - minute_length * cos(minute_angle)
canvas.create_line(cx, cy, x, y, width=5, fill="blue", tags="clock")
# 秒针
x = cx + second_length * sin(second_angle)
y = cy - second_length * cos(second_angle)
canvas.create_line(cx, cy, x, y, width=2, fill="green", tags="clock")
# 在1000ms后调用自身,实现更新表盘指针
canvas.after(1000, draw_clock)
# 创建画布,用于画表盘
canvas = tk.Canvas(root, width=600, height=600)
canvas.pack(expand=True, fill="both")
# 在100ms后调用draw_clock()函数,实现画表盘和指针
canvas.after(100, draw_clock)
# 运行主循环
root.mainloop()
```
这个程序使用Tkinter创建一个窗口,通过Canvas组件画出时钟表盘和指针。程序分为两个主要部分:`draw_clock()`函数和主循环部分。
`draw_clock()`函数用于画表盘和指针,并且每秒钟更新指针位置。首先获取画布的大小,计算表盘半径和中心坐标,然后画出表盘外圆和刻度线。接着计算当前时间对应的指针位置,画出时针、分针和秒针。最后在1000ms后调用自身,实现每秒钟更新指针位置。
主循环部分首先创建画布,然后在100ms后调用`draw_clock()`函数,实现画出表盘和指针。最后运行主循环。
用python canvas制作一个动态钟表,附上代码
好的,以下是使用Python的tkinter模块和canvas组件制作动态钟表的代码:
```
import tkinter as tk
import time
class Clock:
def __init__(self, canvas, x, y, radius):
self.canvas = canvas
self.x = x
self.y = y
self.radius = radius
self.hour_hand = None
self.minute_hand = None
self.second_hand = None
def draw_clock_face(self):
self.canvas.create_oval(self.x - self.radius, self.y - self.radius, self.x + self.radius, self.y + self.radius, width=2)
def draw_hour_marks(self):
for i in range(12):
x1 = self.x + (self.radius - 10) * math.cos(math.pi / 6 * i - math.pi / 2)
y1 = self.y + (self.radius - 10) * math.sin(math.pi / 6 * i - math.pi / 2)
x2 = self.x + (self.radius - 20) * math.cos(math.pi / 6 * i - math.pi / 2)
y2 = self.y + (self.radius - 20) * math.sin(math.pi / 6 * i - math.pi / 2)
self.canvas.create_line(x1, y1, x2, y2, width=2)
def draw_hour_hand(self, hour):
length = self.radius * 0.5
angle = math.pi / 6 * (hour % 12) - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.hour_hand:
self.canvas.coords(self.hour_hand, self.x, self.y, x, y)
else:
self.hour_hand = self.canvas.create_line(self.x, self.y, x, y, width=4)
def draw_minute_hand(self, minute):
length = self.radius * 0.8
angle = math.pi / 30 * minute - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.minute_hand:
self.canvas.coords(self.minute_hand, self.x, self.y, x, y)
else:
self.minute_hand = self.canvas.create_line(self.x, self.y, x, y, width=2)
def draw_second_hand(self, second):
length = self.radius * 0.9
angle = math.pi / 30 * second - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.second_hand:
self.canvas.coords(self.second_hand, self.x, self.y, x, y)
else:
self.second_hand = self.canvas.create_line(self.x, self.y, x, y, fill="red", width=1)
def update_clock(clock):
now = time.localtime()
hour = now.tm_hour
minute = now.tm_min
second = now.tm_sec
clock.draw_hour_hand(hour + minute / 60)
clock.draw_minute_hand(minute)
clock.draw_second_hand(second)
clock.canvas.after(1000, update_clock, clock)
def main():
root = tk.Tk()
root.title("Clock")
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
clock = Clock(canvas, 200, 200, 150)
clock.draw_clock_face()
clock.draw_hour_marks()
update_clock(clock)
root.mainloop()
if __name__ == "__main__":
main()
```
在这个程序中,`Clock`类表示时钟,包括钟表的位置、半径和时针、分针、秒针的状态。`draw_clock_face()`方法用于绘制钟表的圆形,`draw_hour_marks()`方法用于绘制小时刻度线,`draw_hour_hand()`、`draw_minute_hand()`、`draw_second_hand()`方法分别用于绘制时针、分针、秒针。`update_clock()`函数用于更新时钟的状态,每隔一秒钟调用一次。在`main()`函数中,创建主窗口和画布,创建时钟对象并绘制时钟,调用`update_clock()`函数更新时钟的状态。
阅读全文
相关推荐












