Python七位数码管倒计时

Python写2025年6月20日的毕业倒计时,可以实现倒计时但是没有实现数码管动态表示

该回答引用chatgpt:
你可以尝试使用Python中的datetime和time模块来计算倒计时,并使用Python的GUI库(如Tkinter)来实现数码管的动态表示。

下面是一个简单的示例代码,计算从当前时间到2025年6月20日的毕业倒计时,并将结果显示在Tkinter窗口中:

import datetime
import time
import tkinter as tk

# 计算倒计时的函数
def countdown(year, month, day):
    # 计算剩余天数
    today = datetime.date.today()
    target = datetime.date(year, month, day)
    delta = target - today
    remaining_days = delta.days
    
    # 将剩余天数转换为时分秒
    remaining_seconds = remaining_days * 24 * 60 * 60
    hours, remaining_seconds = divmod(remaining_seconds, 3600)
    minutes, seconds = divmod(remaining_seconds, 60)
    
    return (remaining_days, hours, minutes, seconds)

# 创建Tkinter窗口
root = tk.Tk()
root.geometry("300x200")
root.title("Graduation Countdown")

# 创建用于显示倒计时的Label控件
countdown_label = tk.Label(root, font=("Arial", 48), fg="red")
countdown_label.pack(expand=True)

# 更新倒计时显示的函数
def update_countdown():
    countdown_tuple = countdown(2025, 6, 20)
    countdown_str = "{:02d}:{:02d}:{:02d}:{:02d}".format(*countdown_tuple)
    countdown_label.config(text=countdown_str)
    root.after(1000, update_countdown)

# 启动倒计时更新函数
update_countdown()

# 进入Tkinter主循环
root.mainloop()


import time

# 定义一个数字字典,表示每个数字所对应的数码管
digits = {
    0: ['111', '101', '101', '101', '111'],
    1: ['001', '001', '001', '001', '001'],
    2: ['111', '001', '111', '100', '111'],
    3: ['111', '001', '111', '001', '111'],
    4: ['101', '101', '111', '001', '001'],
    5: ['111', '100', '111', '001', '111'],
    6: ['111', '100', '111', '101', '111'],
    7: ['111', '001', '001', '001', '001'],
    8: ['111', '101', '111', '101', '111'],
    9: ['111', '101', '111', '001', '111']
}

# 获取当前时间和目标时间的时间戳
now_time = int(time.time())
target_time = time.mktime((2025, 6, 20, 0, 0, 0, 0, 0, 0))

# 计算剩余时间
seconds_left = int(target_time - now_time)

# 定义数码管输出函数
def print_digit(digit):
    for row in digits[digit]:
        print(row.replace('0', ' ').replace('1', '#'))

# 循环倒计时
while seconds_left > 0:
    # 计算剩余时间的小时、分钟和秒数
    hours_left = seconds_left // 3600
    minutes_left = (seconds_left // 60) % 60
    seconds_left = seconds_left % 60

    # 输出倒计时时间
    print('倒计时:{:02d}:{:02d}:{:02d}'.format(hours_left, minutes_left, seconds_left))

    # 输出数码管表现形式
    print_digit(hours_left // 10)
    print_digit(hours_left % 10)
    print('-' * 3)
    print_digit(minutes_left // 10)
    print_digit(minutes_left % 10)
    print('-' * 3)
    print_digit(seconds_left // 10)
    print_digit(seconds_left % 10)

    # 等待1秒
    time.sleep(1)

    # 控制台清屏
    print('\033[2J')
    print('\033[1;1H')

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7747903
  • 你也可以参考下这篇文章:【Python从入门到精通】(十)Python流程控制的关键字该怎么用呢?列表推导式,生成器【收藏下来,常看常新】
  • 同时,你还可以查看手册:python- 嵌套的列表推导式 中的内容
  • 除此之外, 这篇博客: 【Python 】25 个有用的 Python 代码片段来帮助你的日常工作中的 18. 查找数字列表的最大公约数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    此函数计算数字列表中的最大公约数。

    from functools import reduce
    import math
    def gcd(numbers):
        return reduce(math.gcd, numbers)
    gcd([24,108,90]) # 6
    
  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 编程语言之Python环境安装小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以提供实现倒计时和七位数码管动态显示数字的解决方案,具体步骤如下: 1. 导入需要的库:time, datetime, pyautogui。 2. 使用datetime模块获取当前时间和2025年6月20日毕业日的时间差。 3. 定义一个函数用于将时间差转化为日、小时、分钟和秒的形式。 4. 使用pyautogui库动态显示倒计时,每隔一定时间刷新一次七位数码管。 代码如下:

    import time
    import datetime
    import pyautogui
    
    def main():
        graduate_time = datetime.datetime(2025, 6, 20)  # 设定毕业时间
        while True:
            current_time = datetime.datetime.now()  # 获取当前时间
            if current_time < graduate_time:  # 如果当前时间小于毕业时间
                time_left = graduate_time - current_time  # 计算时间差
                days, seconds = time_left.days, time_left.seconds
                hours = seconds // 3600
                minutes = (seconds % 3600) // 60
                seconds = (seconds % 3600) % 60
                # 将时间差转化为日、小时、分钟和秒的形式
    
                time_str = '{0:03d}{1:02d}{2:02d}{3:02d}'.format(days, hours, minutes, seconds)
                # 将时间差格式化为七位数字,不足位数的前面添加0
    
                pyautogui.FAILSAFE = False
                pyautogui.PAUSE = 0.01
                # 设置鼠标移动间隔时间
    
                for i in range(7):
                    x = 100 + i * 110  # 数字显示的横坐标
                    y = 400  # 数字显示的纵坐标
                    pyautogui.moveTo(x, y)
                    pyautogui.click()
                    pyautogui.typewrite(time_str[i], interval=0.01)
                    # 移动鼠标并在当前位置输入数字
    
                time.sleep(1)  # 等待1秒刷新显示
            else:
                break  # 如果当前时间大于等于毕业时间,停止倒计时
    
    if __name__ == '__main__':
        main()
    

    注意:以上代码中的像素坐标和输入数字的方式适用于我的电脑,如果在其他电脑上执行可能需要修改一些数值。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^