吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2591|回复: 17
收起左侧

[Python 原创] 【python】在终端中输出彩色文字

[复制链接]
thepoy 发表于 2021-5-27 13:33
本帖最后由 thepoy 于 2021-5-28 20:23 编辑

之前写彩色日志的时候用到了彩色文字打印,后来觉得彩色文字不只应用于日志中,其他场合下也可能会用到,比如著名的 ipython。
于是就将彩色文字部分独立出来,方便以后使用,也方便有兴趣的朋友使用。
可以直接用 pip 安装:

pip install colort

源码也很简单:

class _Mode:
    @property
    def normal(self):
        """终端默认样式"""
        return 0

    @property
    def bold(self):
        """高亮或加粗"""
        return 1

    @property
    def underline(self):
        """下划线"""
        return 4

    @property
    def blink(self):
        """闪烁"""
        return 5

    @property
    def invert(self):
        """反白"""
        return 7

    @property
    def hide(self):
        """隐藏"""
        return 8

class _ForegroundColor:
    @property
    def black(self):
        return 30

    @property
    def red(self):
        return 41

    @property
    def green(self):
        return 32

    @property
    def yellow(self):
        return 33

    @property
    def blue(self):
        return 34

    @property
    def purple(self):
        return 35

    @property
    def cyan(self):
        return 36

    @property
    def white(self):
        return 37

class _BackgroudColor:
    @property
    def black(self):
        return 40

    @property
    def red(self):
        return 41

    @property
    def green(self):
        return 42

    @property
    def yellow(self):
        return 43

    @property
    def blue(self):
        return 44

    @property
    def purple(self):
        return 45

    @property
    def cyan(self):
        return 46

    @property
    def white(self):
        return 47

class DisplayStyle:
    foreground_color = _ForegroundColor()
    backgorud_color = _BackgroudColor()
    mode = _Mode()

    @property
    def end(self):
        return 0

    def format_with_one_style(self, src: str, style: int) -> str:
        if type(src) != str:
            raise TypeError(f"type of `src` is {type(src)}, not str")

        if type(style) != int:
            raise TypeError(f"type of `style` is {type(src)}, not int")

        fmt = '\033[%dm%s\033[%dm'
        return fmt % (style, src, self.end)

    def format_with_multiple_styles(self, src: str, *styles: int) -> str:
        if type(src) != str:
            raise TypeError(f"type of `src` is {type(src)}, not str")

        if len(styles) < 2:
            raise TypeError("At least two styles")

        styles_str = []

        for style in styles:
            if type(style) != int:
                raise TypeError(f"type of `style` - [ {style} ] is {type(src)}, not int")
            styles_str.append(str(style))

        style = ";".join(styles_str)
        return f"\033[{style}m{src}\033[{self.end}m"

使用也很简单,只有两个方法:

from colort import display_style as ds

src = "这是要显示的文本"
dist = ds.format_with_one_style(src, ds.foreground_color.red)
print("更改文字颜色:", dist)
dist = ds.format_with_one_style(src, ds.backgorud_color.green)
print("更改文字背景色:", dist)
dist = ds.format_with_multiple_styles(src, ds.foreground_color.red, ds.mode.underline, ds.mode.bold)
print("多种样式:", dist)

效果图:
截屏2021-05-27 08.52.39.png

实际应用:
截屏2021-05-28 20.20.08.png
截屏2021-05-28 20.21.05.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
vethenc + 1 + 1 谢谢@Thanks!【久旱逢甘霖】

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xingyuwan 发表于 2021-5-27 13:41
有了这个就不用买打印机了吧.
QQending 发表于 2021-5-27 18:28
对比rich,楼主觉得哪个更好
https://www.bilibili.com/video/BV12q4y1E7sj
 楼主| thepoy 发表于 2021-5-27 13:47
xingyuwan 发表于 2021-5-27 13:41
有了这个就不用买打印机了吧.

有了打印机打印出来会更好看哦
乡间人 发表于 2021-5-27 14:01
本帖最后由 乡间人 于 2021-5-27 14:03 编辑

被老百姓都用得起的标题诱惑进来,可我这个老百姓连这通篇是啥意思都弄不明白
火车不出轨 发表于 2021-5-27 14:16
有啥用 前提是得有个彩色打印机啊  ....
虽然我有 但我用不到啊 ...
茶城兄弟 发表于 2021-5-27 14:17
这个是写代码用的吗,我以为是什么高级的打印机程序。
 楼主| thepoy 发表于 2021-5-27 14:23
乡间人 发表于 2021-5-27 14:01
被老百姓都用得起的标题诱惑进来,可我这个老百姓连这通篇是啥意思都弄不明白

这是编程语言区,不是精品软件区,不过标题已经改了
 楼主| thepoy 发表于 2021-5-27 14:24
茶城兄弟 发表于 2021-5-27 14:17
这个是写代码用的吗,我以为是什么高级的打印机程序。

是的,不是软件,也不是即插即用的程序
追风营销 发表于 2021-5-27 16:07
这个已经解决了
头像被屏蔽
First丶云心 发表于 2021-5-27 17:13
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表