Skip to main content

封装了常用的 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()

运行后大概会看到如下界面:

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)

运行后的输出为:

设置文本样式示例 1

除此之外,还有 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 示例

上述代码中,我们先输出你好二字,并且不换行,然后让光标向左移动两个单元格,之后再输出的将会覆盖

实际上,上述代码中的Cursor.move_left(2)相当于print(Cursor.move_left(2), flush=True, end='')

其余方法可以查看源代码,文件为*conkits/ansi.py

下面的内容可以在我的 Github 主页上查看

使用 Conio 类

清除屏幕

清除行

进行非缓冲输入

进行非阻塞性输入

进行可打断的 sleep

使用 Colors256 设置前/背景色

使用 DynamicPrint 动态输出字符

使用 Choice 创建选项

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conkits-0.2.2.tar.gz (49.2 kB view hashes)

Uploaded Source

Built Distribution

conkits-0.2.2-py3-none-any.whl (52.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page