Python 更改cmd中的字色

本文介绍如何使用Python内置库ctypes调用Windows API来改变CMD窗口的字体颜色,提供了一个简单的示例代码,演示如何实现不同颜色的文字输出。

    没有gui的python程序是在cmd窗口中运行的,黑色背景,灰色的字,确实很复古,不符合现代人的使用习惯…同事在用我写的小工具时,清一色的字色,看起来会没有重点性,因此我就想通过更改cmd中的字色来改善。

    在网上查了相应的资料,可以通过ctypes这个第三方模块来调用Windows API函数达到目的。可是我在sourceforge上只找到了适用于py2.5以下版本的ctypes,且作者已经不更新了…!!

    又在网上找ctypes的信息,竟然发现,从py2.7开始,这个库就已经被集成成标配了!!真是柳暗花明又一村,得来全不费功夫啊!!使用方法如下:


# -*- coding: gb2312 -*- 

import ctypes
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE= -11
STD_ERROR_HANDLE = -12


FOREGROUND_BLACK = 0x0
FOREGROUND_BLUE = 0x01 # text color contains blue.
FOREGROUND_GREEN= 0x02 # text color contains green.
FOREGROUND_RED = 0x04 # text color contains red.
FOREGROUND_INTENSITY = 0x08 # text color is intensified.

BACKGROUND_BLUE = 0x10 # background color contains blue.
BACKGROUND_GREEN= 0x20 # background color contains green.
BACKGROUND_RED = 0x40 # background color contains red.
BACKGROUND_INTENSITY = 0x80 # background color is intensified.
#上面这一大段都是在设置前景色和背景色,其实可以用数字直接设置,我的代码直接用数字设置颜色


class Color:
    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
    
    def set_cmd_color(self, color, handle=std_out_handle):
        bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
        return bool
    
    def reset_color(self):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
        #初始化颜色为黑色背景,纯白色字,CMD默认是灰色字体的
        
    def print_red_text(self, print_text):
        self.set_cmd_color(4 | 8)
        print print_text
        self.reset_color()
        #红色字体
        
    def print_green_text(self, print_text):
        self.set_cmd_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)
        c = raw_input(print_text)
        self.reset_color()
        return c
        #绿色字体。实现的是,让用户输入的字体是绿色的,记得返回函数值。
        
    def print_yellow_text(self, print_text): 
        self.set_cmd_color(6 | 8)
        print print_text
        self.reset_color()
        #黄色字体

    def print_blue_text(self, print_text): 
        self.set_cmd_color(1 | 10)
        print print_text
        self.reset_color()
        #蓝色字体


clr = Color()
clr.set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
clr.print_red_text('red')
clr.print_green_text("输入: ")
clr.print_blue_text('blue')
clr.print_yellow_text('yellow')

raw_input()


运行结果如下:



转载于:https://www.cnblogs.com/noahzn/p/4133251.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值