我使用下面的代码:
import time
import sys
def delay_print(s):
for c in s:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.25)
def Loading():
load = int(10)
while load != 0:
delay_print("...\r \r")
load = load - 1
time.sleep(0.5)
Loading()
这工作正常,但有没有什么方法可以删除白色时,它显示使用\r
命令?
1条答案
按热度按时间rt4zxlrg1#
你必须明白的是,字符串的
\r
部分是控制字符-\r
,名为“回车”控制字符,它具有十进制代码“13”,也可以写成十六进制编码\x0c
,向 * 终端 * 仿真器程序发出信号(程序的窗口是一个中央文本区域,在那里执行Python代码)将其解释为“将(打印)光标返回到当前行的开头”。与更复杂的控制代码不同,它可以执行着色文本或在其他行中任意定位等操作,即使在Windows的
cmd
默认终端上也可以默认工作。所以,这里有空白的原因是,如果要在同一行中重新打印的新字符串比前一个字符串短,旧字符串的剩余字符将不会被删除-并且信息将被破坏。就像,如果这是用来显示时钟,如果在“23 h59”之后打印“0 h 00”,终端中的结果将是“0 h 009”(由于新字符串的尺子仅为4个字符,因此前一个字符串中的“9”未被覆盖)
在这段代码中,每个字符之间都有一个停顿,空白只是为了擦除,通过打印覆盖,前面的每个点。
因此,虽然可以重写这段代码,使变量中有所需的空格数,而不是在字符串中有3个硬编码的空格,但仍然需要为每个“.”或其他字符打印一个空格字符。即使对于更复杂的文本用户界面(TUI)程序,这仍然是正确的:输出一个空格字符实际上是“擦除”一个字符单元格。(可以使用其他没有字形的unicode字符来代替-但是这些字符在各种终端程序中不受支持,并且不具有与“空字符单元格”相同的语义含义)
下面是相同的脚本,它将“”替换为一个简单的逻辑,该逻辑计算打印的字符并一次擦除一个字符:
(It还用标准
print
函数代替了sys.stdout.write
的使用,该函数具有以同步方式一次打印一个字符所需的参数)