封装了常用的 ANSI 控制码,包括前景色,背景色,光标控制以及一些其他的有趣功能。
Project description
Conkits (Console Kits)
👋作用👋
该库旨在封装常见 ANSI 控制码,使其使用的使用更加清晰和方便(大概)。
ANSI 控制码包含了标准的前景色和背景色,256色,字体样式的设置,光标的移动和控制和终端擦除显示的功能。
除此之外,还包含两个有趣的类(Dynamic 和 Choice),可以实现在终端逐字打印字符(就像 gal 游戏里面逐字文本显示一样)和更加友好的选项选择。
✨编写 conkits 的动机✨
在写这个库的时候,我还是一个刚入门两个月不到的 python 新手。
因为喜欢研究终端文本的显示效果,再加上我当时并不知道已经有很多类似封装 ANSI 代码的第三方库(而且还有像 rich 这种非常 nb 的库),也不知道在 pypi 上搜索类似的库,导致我经常在代码中写了大量的 ANSI 控制代码😓。
逐渐的,我产生了一种想法,那就是写一个包含常用 ANSI 代码的 python 库,然后上传到 pypi,让不知道 ANSI 代码的人也可以轻松的设置终端文本的显示样式。(当时我竟天真的认为类似的库几乎没有😃)
然后有某天我接触到colorama
这个库,才知道已经有人封装了 ANSI 代码😢。但是当时的我不太认可 colorama 封装的方式,认为写Fore.GREEN
比写\033[32m
要麻烦很多,何必在费力的去多敲这么多字符呢?
不过这也暂时打消了我写一个库的想法,但是经过我一段时间的使用,发现 colorama 似乎没有封装控光标移动的 ANSI 代码🤔?
这又突然激起了我写一个库的想法,于是,抱着扩展 colorama 库的想法并参考了 colorama 的部分代码,我决定写一个自己的第三方库,于是就有了 conkits。
然而当我写到一半才发现,已经有太多封装 ANSI 代码的库了,比如 blessing,colored,库名中包含 ansi, term, color 等等的各种库。而且大多代码写得都很好😢😢😢。
但是已经付出了这么多精力,总得有个结果吧,因为简单的封装大多数的库都有了,所以我决定再加一些特别的功能。
就这样经过中途不断的增改和调试,一个多月后,我终于上传了conkits 0.2.1
,一个算是稳定能用的版本,之后就在也没更新过了。
就这样过了好几个月,回头再看这个库,发现很多地方的想法认知都有不少错误和不足,略感羞愧,于是我就从 pypi 中删除了 conkits。
然后最近,之前被我介绍过 conkits 的某网友跟我说,他的某个参赛代码中用到了我的库,但是我已经把库删除了😧,所以我在稍微改了一些代码后,又上传了 conkits 然后就是现在的版本 0.2.2。
🎁用法🎁
查看 conkits_help
conkits_help
是一个在终端交互式介绍用法的函数。灵感来源于 python 的help
函数。
当然这可能会不太方便,但是当时的我还不会写 Markdown,所以想了这么个歪招😭。
但是介绍真的很详细,写 conkits_help 花了我好几个星期,把我都快写吐了。
你可以在命令行通过以下命令运行 conkits_help:
python -m conkits
或者在 python 中通过以下代码运行 conkits_help:
from conkits import conkits_help
conkits_help()
运行后大概会看到如下界面:
使用 Fore, Back, Style 设置文本颜色和样式
由于我当初设计上的问题,在定义的关于前/背景色和样式 ANSI 代码中,我保留了对应的 ANSI 整数值和 ANSI 代码字符串,因此,如果要真正的设置上样式,需要在对应属性的后面加上小写的s
。
比如下面的代码:
from conkits import Fore
# GREEN 代表对应的 ANSI 码,为整数值,GREENs 则是可以被终端识别的 ANSI 控制码字符串
print(Fore.GREEN, repr(Fore.GREENs))
print(Fore.YELLOWs + 'Hello' + Fore.GREENs + 'World' + Fore.RESETs)
运行后的输出为:
除此之外,还有 Back, Style 两个类分别用于设置背景色和文本样式,用法也基本同上,具体包含的属性可以查看源代码,文件为conkits/ansi.py。
很简单,不用怕看不懂😀。
使用 Cursor 类控制光标移动
控制光标移动需要使用Cursor
类,在该类中有一些方法带后缀_s
,这表明该方法会返回一个可以输出到终端的 ANSI 控制码字符串,而不带_s
后缀的则直接输出到终端。
比如下面的例子:
from conkits import Cursor
print('你好', end='')
Cursor.move_left(2)
print('吗')
# 查看实际实际输出的 ANSI 控制码
print(repr(Cursor.move_left_s(2)))
上述代码中,我们先输出你好二字,并且不换行,然后让光标向左移动两个单元格,之后再输出的吗将会覆盖好。
实际上,上述代码中的Cursor.move_left(2)
相当于print(Cursor.move_left(2), flush=True, end='')
。
其余方法可以查看源代码,文件为*conkits/ansi.py。
下面的内容可以在我的 Github 主页上查看
使用 Conio 类
清除屏幕
清除行
进行非缓冲输入
进行非阻塞性输入
进行可打断的 sleep
使用 Colors256 设置前/背景色
使用 DynamicPrint 动态输出字符
使用 Choice 创建选项
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.