Красивый таймер

Суть проблемы проста - есть код для вывода времени(как в обычном таймере), но он выводит построчно. Может кто знает, какой литерал нужно использовать для того, чтобы время выводилось нормально (т.е. в одну строку с возвратом каретки, но без перехода на следующую строку, что позволило бы выводить время постоянно в одну и ту же строку на одно и тоже месте)?

import time

seconds = 57

while True:
    print('{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                     seconds // 60 % 60,
                                     seconds % 60))
    time.sleep(1.0)
    seconds += 1

Ответы (3 шт):

Автор решения: vp_arth

Для очистки можно воспользоваться системными средствами
или ANSII \033c escape-последовательностью:

import os
def cls():
    print("\033c", end='')
    # os.system('cls' if os.name=='nt' else 'clear')


import time
seconds = 57
while True:
    cls()
    print('{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                     seconds // 60 % 60,
                                     seconds % 60))
    time.sleep(1.0)
    seconds += 1

Или, если убрать из печати перенос строки, можно воспользоваться возвратом каретки \r:

import time
seconds = 57
while True:
    # cls()
    print('\r{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                     seconds // 60 % 60,
                                     seconds % 60), end='')
    time.sleep(1.0)
    seconds += 1
→ Ссылка
Автор решения: Kers

Такой вариант подойдет?

import time

seconds = 57
while True:
    d = str('{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                     seconds // 60 % 60,
                                     seconds % 60))
    print(d[0:20], end = "\r")
    time.sleep(1)
    seconds += 1
    

В принципе решается добавление end = "\r" в print

→ Ссылка
Автор решения: Serg Bocharov

Как-то так:

import time

seconds = 57
while True:
    d = str('{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                       seconds // 60 % 60,
                                       seconds % 60))
    print(d[0:20], end="")
    time.sleep(1)
    print("\r\033[K", end='') # перенос курсора в начало текущей строки
    seconds += 1

О! Вот нашел из старых ответов vp_arth:

import colorama
from time import sleep
from datetime import datetime

digits = dict()
digits['0'] = 'Zero'
digits['1'] = 'One'
digits['2'] = 'Two'
digits['3'] = 'Three'
digits['4'] = 'Four'
digits['5'] = 'Five'
digits['6'] = 'Six'
digits['7'] = 'Seven'
digits['8'] = 'Eight'
digits['9'] = 'Nine'

colorama.init()

while True:    
    for ch in datetime.now().strftime("%H:%M:%S"):
        if ch in digits:
             print(digits[ch], end='')            
        else:
            print(ch, end='')
    sleep(1)
    print("\r\033[K", end='')

Ну и вот вариант с красивыми арабскими цифрами (меняем значения словаря) :)

digits['0'] = '\u0660'
digits['1'] = '\u0661'
digits['2'] = '\u0662'
digits['3'] = '\u0663'
digits['4'] = '\u0664'
digits['5'] = '\u0665'
digits['6'] = '\u0666'
digits['7'] = '\u0667'
digits['8'] = '\u0668'
digits['9'] = '\u0669'

Вывод:

٢١:٥٣:٠٨
→ Ссылка