【问题标题】:Carriage Return not working in IDLE?回车在 IDLE 中不起作用?
【发布时间】:2016-03-03 09:32:06
【问题描述】:

我正在尝试为保持原位的倒数计时器创建代码:以便每一行都覆盖前一行。这是我目前所拥有的:

import time

def countdown(t):
    while t:
        mins, secs = divmod(t, 60)
        timeformat = "{:02d}:{:02d}".format(mins, secs)
        print(timeformat, end='\r')
        time.sleep(1)
        t -= 1
    print("That's the end! You lose...\n\n\n\n\n")
    exit()

countdown(10)

然而,输出是:

00:10
00:09
00:08
...
00:00
That's the end! You lose...

为什么回车似乎不起作用?

【问题讨论】:

  • 您使用的是什么操作系统?你是如何运行程序的?它通过 Windows 命令提示符在 Windows 7 上为我工作,因此问题可能是特定于操作系统的。
  • 它也可以在终端中的 Ubuntu 上运行。问题很可能是您的终端(或任何显示输出的终端)不理解 CR - 您的 python 代码很好(我会添加 flush=True,明确地说,但它应该按原样工作)。
  • 对我来说与@Matthew 相同的环境/结果。运行良好。
  • 好的,这对我来说在 IDLE 中也不起作用。下面提出的答案也不是。所以这与 IDLE 如何处理某些字符有关。我相信 idle 是用 Tkinter 构建的,它本身依赖于 Tcl/Tk,所以我不确定问题发生的程度。 IDLE 可能不是运行此类程序的最佳场所。而是使用适当的 shell 运行它。
  • @Matthew:tk Text 小部件不会解释除“\n”之外的任何内容。你是对的,空闲并不意味着程序的生产运行。这是一个发展和学习的环境。为此,已决定“按原样”显示输出更好。另一个问题是解释控制字符的不同环境的行为并不完全相同。

标签: python python-3.x python-idle


【解决方案1】:

IDLE doesn't support most control characters such as \r, \b。还是true in 2020 (no support in Python 3.9)

如果您在 Unix 终端或 Windows 控制台中启动 Python REPL,\r 应该可以工作。

【讨论】:

    【解决方案2】:

    \r 不起作用时,请尝试\x08(退格),并添加flush=True 以确保安全:

    print('\x08' * 5 + timeformat, end='', flush=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多