7段数码管绘制

import turtle
import time

初始化画笔设置

def setup_pen():
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
pen.pensize(5)
return pen

绘制七段数码管的单个段

def draw_segment(pen, segment, x, y, color):
pen.color(color)
pen.penup()

# 定义各段的起始点和绘制路径
if segment == 'a':
    pen.goto(x, y)
    pen.pendown()
    pen.goto(x + 40, y)
elif segment == 'b':
    pen.goto(x + 40, y)
    pen.pendown()
    pen.goto(x + 40, y - 40)
elif segment == 'c':
    pen.goto(x + 40, y - 80)
    pen.pendown()
    pen.goto(x + 40, y - 40)
elif segment == 'd':
    pen.goto(x, y - 80)
    pen.pendown()
    pen.goto(x + 40, y - 80)
elif segment == 'e':
    pen.goto(x, y - 80)
    pen.pendown()
    pen.goto(x, y - 40)
elif segment == 'f':
    pen.goto(x, y)
    pen.pendown()
    pen.goto(x, y - 40)
elif segment == 'g':
    pen.goto(x, y - 40)
    pen.pendown()
    pen.goto(x + 40, y - 40)

pen.penup()

绘制完整的数字

def draw_digit(pen, digit, x, y, color):
# 定义每个数字需要点亮的段
digit_segments = {
'0': ['a', 'b', 'c', 'd', 'e', 'f'],
'1': ['b', 'c'],
'2': ['a', 'b', 'g', 'e', 'd'],
'3': ['a', 'b', 'g', 'c', 'd'],
'4': ['f', 'g', 'b', 'c'],
'5': ['a', 'f', 'g', 'c', 'd'],
'6': ['a', 'f', 'g', 'e', 'c', 'd'],
'7': ['a', 'b', 'c'],
'8': ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
'9': ['a', 'b', 'c', 'd', 'f', 'g']
}

for segment in digit_segments.get(str(digit), []):
    draw_segment(pen, segment, x, y, color)

绘制冒号分隔符

def draw_colon(pen, x, y):
pen.penup()
pen.goto(x, y - 15)
pen.dot(8, 'black')
pen.goto(x, y - 45)
pen.dot(8, 'black')

绘制文本标签

def draw_label(pen, text, x, y, color):
pen.penup()
pen.goto(x, y - 100)
pen.color(color)
pen.write(text, align='center', font=('Arial', 12, 'normal'))

绘制完整时间显示(调整了年份和月份的间距)

def draw_time(pen):
current_time = time.localtime()
year = current_time.tm_year
month = current_time.tm_mon
day = current_time.tm_mday
hour = current_time.tm_hour
minute = current_time.tm_min
second = current_time.tm_sec

pen.clear()

# 绘制年份(红色)
year_x = -280  # 向左移动一些
for i, digit in enumerate(str(year)):
    draw_digit(pen, digit, year_x + i * 60, 100, 'red')
draw_label(pen, "年", year_x + len(str(year)) * 30, 100, 'red')

# 绘制月份(蓝色) - 增加与年份的间距
month_x = -50  # 从-100调整为-50,增加间距
for i, digit in enumerate(f"{month:02d}"):
    draw_digit(pen, digit, month_x + i * 60, 100, 'blue')
draw_label(pen, "月", month_x + 60, 100, 'blue')

# 绘制日期(绿色) - 相应调整位置
day_x = 120  # 从100调整为120
for i, digit in enumerate(f"{day:02d}"):
    draw_digit(pen, digit, day_x + i * 60, 100, 'green')
draw_label(pen, "日", day_x + 60, 100, 'green')

# 绘制时间(第二行)
time_x = -150
# 小时(紫色)
for i, digit in enumerate(f"{hour:02d}"):
    draw_digit(pen, digit, time_x + i * 60, -50, 'purple')
draw_label(pen, "时", time_x + 60, -50, 'purple')

# 冒号
draw_colon(pen, time_x + 120, -50)

# 分钟(橙色)
for i, digit in enumerate(f"{minute:02d}"):
    draw_digit(pen, digit, time_x + 140 + i * 60, -50, 'orange')
draw_label(pen, "分", time_x + 200, -50, 'orange')

# 冒号
draw_colon(pen, time_x + 260, -50)

# 秒钟(棕色)
for i, digit in enumerate(f"{second:02d}"):
    draw_digit(pen, digit, time_x + 280 + i * 60, -50, 'brown')
draw_label(pen, "秒", time_x + 340, -50, 'brown')

turtle.update()
turtle.ontimer(lambda: draw_time(pen), 1000)

主程序

def main():
screen = turtle.Screen()
screen.setup(1000, 400) # 加宽窗口以适应新布局
screen.title("七段数码管时钟")
screen.bgcolor("white")
screen.tracer(0)

pen = setup_pen()
draw_time(pen)

turtle.done()

if name == "main":
main()

posted @ 2025-05-05 19:03  HeDesongfuqin  阅读(77)  评论(0)    收藏  举报