Cool_Breeze 发表于 2020-12-19 08:36

python 在控制台输出Color

本帖最后由 Cool_Breeze 于 2020-12-19 08:38 编辑

# coding=utf-8

# SetConsoleTextAttribute 函数是靠一个字节的低四位来控制前景色,高四位来控制背景色。(0b00000000 - 0b11111111)
# H 开头高亮

import ctypes, sys

class CmdColor(object):
    _STD_INPUT_HANDLE = -10
    _STD_OUTPUT_HANDLE = -11
    _STD_ERROR_HANDLE = -12
   
    F_BLACK = 0x00
    F_BLUE = 0x01
    F_GREEN = 0x02
    F_SKYBLUE = 0x03
    F_RED = 0x04
    F_VIOLET = 0x05
    F_YELLOW = 0x06
    F_WHITE = 0x07
    F_GRAY = 0x08
    F_HBLUE = 0x09
    F_HGREEN = 0x0A
    F_HSKYBLUE = 0x0B
    F_HRED = 0x0C
    F_HVIOLET = 0x0D
    F_HYELLOW = 0x0E
    F_HWHITE = 0x0F
   
    B_BLACK = 0x00
    B_BLUE = 0x10
    B_GREEN = 0x20
    B_SKYBLUE = 0x30
    B_RED = 0x40
    B_VIOLET = 0x50
    B_YELLOW = 0x60
    B_WHITE = 0x70
    B_GRAY = 0x80
    B_HBLUE = 0x90
    B_HGREEN = 0xA0
    B_HSKYBLUE = 0xB0
    B_HRED = 0xC0
    B_HVIOLET = 0xD0
    B_HYELLOW = 0xE0
    B_HWHITE = 0xF0
   
    def __init__(self):
      self._handle = ctypes.windll.kernel32.GetStdHandle(
            CmdColor._STD_OUTPUT_HANDLE)

    def setColor(self, color):
      ctypes.windll.kernel32.SetConsoleTextAttribute(self._handle, color)
   
    def reSetColor(self):
      self.setColor(self.F_WHITE)
      
    def print(self,color, mess):
      self.setColor(color)
      sys.stdout.write(mess)
      sys.stdout.flush()
      self.reSetColor()


if __name__ == '__main__':
    color = CmdColor()
    # color.setColor(color.F_HYELLOW | color.B_BLACK)
    # print('Cool_Breeze')
    # print('Cool_Breeze')
    # color.reSetColor()
    # 需要手动添加换行符
    # color.print((color.F_HSKYBLUE | color.B_GRAY), 'Cool_Breeze\n')
    # color.print(0x8B, 'Cool_Breeze\n')
    for n in range(1,256,1):
      color.print(n, f'{n:<4} hex:{bin(n):<12}')
      if n%5 == 0 :print()

结果图:

Cool_Breeze 发表于 2020-12-19 17:23

haidibingjing 发表于 2020-12-19 16:52
\033[1;31;40m ***********\033[0m
这样设置的在pycharm中运行时是有颜色的   但是生成exe文件执行的 ...

这个是在Linux系统上面才会打印彩色! windows上面不会!

haidibingjing 发表于 2020-12-19 16:52

Cool_Breeze 发表于 2020-12-19 12:31
你说的太模糊! 我搞不清楚!...

\033[1;31;40m ***********\033[0m
这样设置的在pycharm中运行时是有颜色的   但是生成exe文件执行的时候就没有颜色了

Cool_Breeze 发表于 2020-12-19 08:40

color.print(n, f'{n:<4} bin:{bin(n):<12}')
截图 hex 忘改了 应该是 bin

pinesnow 发表于 2020-12-19 09:10

以前一直想着彩色打印,但没弄过,看到这帖子果断点进来了,很实用。

haidibingjing 发表于 2020-12-19 10:00

请教个问题   py文件转成的exe运行的时候怎么改变颜色呢?

千年恨 发表于 2020-12-19 10:02

AttributeError: module 'ctypes' has no attribute 'windll' 啊哦&#128559;

Cool_Breeze 发表于 2020-12-19 10:07

千年恨 发表于 2020-12-19 10:02
AttributeError: module 'ctypes' has no attribute 'windll' 啊哦&#128559;

你的python版本多少?我是3.7

Cool_Breeze 发表于 2020-12-19 10:10

haidibingjing 发表于 2020-12-19 10:00
请教个问题   py文件转成的exe运行的时候怎么改变颜色呢?

代码写的啥,转成exe 也不会改变啊!

haidibingjing 发表于 2020-12-19 11:34

Cool_Breeze 发表于 2020-12-19 10:10
代码写的啥,转成exe 也不会改变啊!

就是用哪个模块或者代码可以再生成exe文件后也可以有颜色

Cool_Breeze 发表于 2020-12-19 12:31

haidibingjing 发表于 2020-12-19 11:34
就是用哪个模块或者代码可以再生成exe文件后也可以有颜色

你说的太模糊! 我搞不清楚!...

BlueZ0514 发表于 2020-12-19 12:57

一天掌握一点小知识,感谢分享
页: [1] 2
查看完整版本: python 在控制台输出Color