python-3.x 如何在其他文本上添加计时器?

bxpogfeg  于 2023-02-01  发布在  Python
关注(0)|答案(1)|浏览(118)

我想有一个以上的输入计时器,然后结束计时器一旦玩家输入任何东西。
到目前为止,我已经尝试过使用threading、sys.flush和多线程来终止线程,但是我无法输入任何内容,因为计时器只是跟随光标。
我的代码:

def DisplayTime():
  import sys
  while True:
    sys.stdout.write('\r'+str(format_time))
    sys.stdout.flush()

displayTime = threading.Thread(name='DisplayTime', target=DisplayTime)

其他地方:

displayTime.start()

事情经过:

>>> Text Here
>>> Timer: 0:00:00(Wait for input)

我就知道会这样:
一个三个三个一个

9udxz4iz

9udxz4iz1#

下面的代码打印一个计时器,后面是一行文本,后面是一个空行,光标显示在空行上。start_time让我们计算经过的时间,last_printed跟踪上次打印的时间,这样我们就不必在每次迭代时都打印。重要的部分取自其他StackOverflow答案:
Move cursor up one line
Non-blocking console input

import sys
import time
import msvcrt
import datetime

start_time = time.time()
last_printed = -1
print('\n')

while True:
    elapsed_time = time.time() - start_time
    int_elapsed = int(elapsed_time)
    if int_elapsed > last_printed:
        elapsed_td = datetime.timedelta(seconds=int_elapsed)
        # Go up one line: https://stackoverflow.com/a/11474509/20103413
        sys.stdout.write('\033[F'*2 + str(elapsed_td) + '\nText here\n')
        sys.stdout.flush()
        last_printed = int_elapsed
    # Non-blocking input: https://stackoverflow.com/a/2409034/20103413
    if msvcrt.kbhit():
        print(msvcrt.getch().decode())
        break

相关问题