Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用特殊字符实现console UI大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_1@

概述

我们经常见到一些开源软件在安装或运行时,实现了某种程度上的基于Linux命令行终端的界面,使我们可以更直观的感受软件运行情况或进度, 例如下面的测试进度变化: 使用Python时,我们可以通过print()函数和某些特殊字符达到上面的效果。 先看一下Python的print()函数定义:从下面的帮助文档,我们可以看到print()有4个关键字参数: sep, end, file, flush, 其

我们经常见到一些开源软件在安装或运行时,实现了某种程度上的基于Linux命令行终端的界面,使我们可以更直观的感受软件运行情况或进度, 例如下面的测试进度变化:

使用特殊字符实现console UI

使用Python时,我们可以通过print()函数和某些特殊字符达到上面的效果

先看一下Python的print()函数定义:从下面的帮助文档,我们可以看到print()有4个关键字参数: sep,end,file,flush,其中sep表示当打印多个参数时,各参数间的分隔符,认为一个空格;end表示一次打印结束时添加的结尾标识符,认为换行符;file为类似文件字节流对象,认为sys.stdout; flush 指示是否强制将缓冲区数据写入输出设备,对于sys.stdout来讲,就是显示器。

print(...)
    print(value,...,sep= ,end=\n,file=sys.stdout,flush=falsE)
    
    Prints the values to a stream,or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   String inserted between values,default a space.
    end:   String appended after the last value,default a newline.
    flush: whether to forcibly flush the stream.

再看一下转义字符‘\r‘,该字符使的输入位置重新回到本行开头。利用print()的end参数和‘\r‘,我们可以实现一个的进度条:

使用特殊字符实现console UI

代码如下:

import time

for i in range(1,11):
    percent = i * 10
    if i < 10:
        bar = [ + = * (i * 5) + >]
        print({}% {}\r.format(percent,bar),end=‘‘)
    else:
        bar = [ + = * (i * 5) + ]
        print({}% {}\r.format(percent,bar))
    time.sleep(1)

 

我们也可以使用特定的字符组合控制输出的颜色, 例如

使用特殊字符实现console UI

代码如下:

#utils/textcolor.py

class TextColor:
    NONE = "\033[0m"
    RED = "\033[0;31m"
    BLACK = "\033[0;30m"
    WHITE = "\033[1;37m"
    GREEN = "\033[0;32m"
    BLUE = "\033[0;34m"
    YELLOW = "\033[1;33m"
    BROWN = "\033[0;33m"
    CYAN = "\033[0;36m"
    PURPLE = "\033[0;35m"
    DARK_GRAY = "\033[1;30m"
    LIGHT_BLUE = "\033[1;34m"
    LIGHT_GREEN = "\033[1;32m"
    LIGHT_CYAN = "\033[1;36m"
    LIGHT_RED = "\033[1;31m"
    LIGHT_PURPLE = "\033[1;35m"
    LIGHT_GRAY = "\033[0;37m"

# colors.py
from utils.textcolor import TextColor

print(TextColor.RED + 红色 + TextColor.NONE,end= )
print(TextColor.GREEN + 绿色 + TextColor.NONE,end= )
print(TextColor.bLUE + 蓝色 + TextColor.NONE,end= )
print(TextColor.YELLOW + 黄色 + TextColor.NONE,end= )
print(TextColor.WHITE + 白色 + TextColor.NONE,end= )
print(TextColor.LIGHT_GRAY + 浅灰色)

 其实,添加加颜色只是ANSI控制码中的一种,ANSI控制码可以帮我们实现很多功能一个完整的列表如下:

/033[0m 关闭所有属性

/033[1m 设置高亮度

/033[4m 下划线

/033[5R_55_11845@ 闪烁

/033[7m 反显

/033[8m 消隐

/033[30m -- /033[37m 设置前景色

/033[40R_55_11845@ -- /033[47m 设置背景色

/033[nA 光标上移n行

/033[nB 光标下移n行

/033[nC 光标右移n行

/033[nD 光标左移n行

/033[y;xH设置光标位置

/033[2J 清屏

/033[K 清除从光标到行尾的内容

/033[s 保存光标位置

/033[u 恢复光标位置

/033[?25l 隐藏光标

/033[?25h 显示光标

 现在回到本文的开始:如何实现类似test.py的效果?这其中最主要的难点是我们不仅要修改/覆盖当前行的输出内容,还要修改/覆盖非当前行的内容一个最直接简单的思路是我们用python Dict变量记录所有输出内容和它相对应的打印输出时的行号(需注意的是,如果运行过程中涉及到滚屏,所记录的的行号也应该相应递减: 每滚动一行,所记录的行号减1),在我们准备更新某条信息时,先查找它被输出到了哪一行,然后把光标定位到相应行,打印输出更新后的信息,最后把光标恢复到当前行。

@H_696_409@

大佬总结

以上是大佬教程为你收集整理的使用特殊字符实现console UI全部内容,希望文章能够帮你解决使用特殊字符实现console UI所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。