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()

浙公网安备 33010602011771号