colors - 如何在不导入其他模块的情况下更改 python 中文本的颜色?
问题描述
您如何创建打印语句,例如print("Hello world")
可能是不同的颜色(例如绿色)。
另外,有没有一种不需要下载新模块的方法?
解决方案
@epicgamer300065,这是一个实际的完整 IDLE 解决方案,它在 win10pro 上使用 Python 3.8.1 对我有用,但它在终端中不起作用。
它来自idlecolors,由于您的访问权限有限,我在idlecolors.py
此处包含了所需的完整模块,以便您轻松复制/粘贴,以规避您无法安装的情况。
如您所见,唯一的依赖项是 modulessys
和random
,但random
仅在必要randcol()
时可以不使用的功能才需要。
这是idlecolors.py
:
import sys
import random
# This will only work in IDLE, it won't work from a command prompt
try:
shell_connect = sys.stdout.shell
except AttributeError:
print("idlecolors highlighting only works with IDLE")
exit()
# Map the colour strings to IDLE highlighting
USE_CUSTOM_COLORS = False # Change to True if you want to use custom colours
global colormap
if USE_CUSTOM_COLORS:
colormap = {"red": "COMMENT",
"orange": "KEYWORD",
"green": "STRING",
"blue": "stdout",
"purple": "BUILTIN",
"black": "SYNC",
"brown": "console",
"user1": "DEFINITION",
"user2": "sel",
"user3": "hit",
"user4": "ERROR",
"user5": "stderr"}
else:
colormap = {"red": "COMMENT",
"orange": "KEYWORD",
"green": "STRING",
"blue": "stdout",
"purple": "BUILTIN",
"black": "SYNC",
"brown": "console"}
# ---------------------------
# Functions
# ---------------------------
# Like the print() function but will allow you to print colours
def printc(text, end="\n"):
# Parse the text provided to find {text:color} and replace with the colour. Any text not encompassed in braces
# will be printed as black by default.
buff = ""
for char in text:
if char == "{":
# Write current buffer in black and clear
shell_connect.write(buff, colormap["black"])
buff = ""
elif char == "}":
# Write current buffer in color specified and clear
tag_write = buff.split(":")
shell_connect.write(tag_write[0], tag_write[1])
buff = ""
else:
# Add this char to the buffer
buff += char
# Write the chosen end character (defaults to newline like print)
sys.stdout.write( end )
# Individual colour functions
def red(text):
return "{"+ text + ":" + colormap["red"] + "}"
def orange(text):
return "{"+ text + ":" + colormap["orange"] + "}"
def green(text):
return "{"+ text + ":" + colormap["green"] + "}"
def blue(text):
return "{"+ text + ":" + colormap["blue"] + "}"
def purple(text):
return "{"+ text + ":" + colormap["purple"] + "}"
def black(text):
return "{"+ text + ":" + colormap["black"] + "}"
def brown(text):
return "{"+ text + ":" + colormap["brown"] + "}"
def randcol(text):
color = random.choice(list(colormap.keys()))
return "{"+ text + ":" + colormap[color] + "}"
# User defined colours
def user1(text):
return "{"+ text + ":" + colormap["user1"] + "}"
def user2(text):
return "{"+ text + ":" + colormap["user2"] + "}"
def user3(text):
return "{"+ text + ":" + colormap["user3"] + "}"
def user4(text):
return "{"+ text + ":" + colormap["user4"] + "}"
def user5(text):
return "{"+ text + ":" + colormap["user5"] + "}"
以下是您将如何使用它:
from idlecolors import *
printc( red("Red text") )
printc( "If you add " + red("red") + " to " + blue("blue") + ", you get " + purple("purple") )
# Print a line in a random colour
printc( randcol("This is a random colour") )
# Print each word in a random colour
mytext = "This is a random piece of text which I want to print in random colours"
mytext = mytext.split(" ")
for word in mytext:
printc(randcol(word), end=" ")
可用的颜色有red()
、orange()
、green()
、blue()
、purple()
、black()
、brown()
,您可以使用randcol()
此选项中的随机颜色。