Yes, it is possible to print from Python using non-ANSI colors, but it depends on the context in which you are printing and the environment you are targeting. Non-ANSI colors typically refer to colors outside the standard 16 ANSI colors or their extended 256-color palette.
Here are some methods to achieve this:
1. Extended 24-bit (True Color) Support in Modern Terminals
Modern terminals (e.g., GNOME Terminal, Windows Terminal, iTerm2) support true color (24-bit) output, allowing you to use any RGB value for text color.
You can use the ESC
(escape) sequences to specify the RGB values:
def print_rgb_text(r, g, b, text):
# Format for 24-bit color: \033[38;2;R;G;BmTEXT\033[0m
print(f"\033[38;2;{r};{g};{b}m{text}\033[0m")
print_rgb_text(128, 0, 128, "This is a purple text!")
38;2;R;G;B
sets the foreground color using RGB values.- Replace
38
with48
for background color. \033[0m
resets the colors after the text.
Make sure your terminal supports true color. You can check terminal compatibility using the True Color Test Script.
2. Using Libraries for Richer Color Support
Several Python libraries abstract away the complexity of escape sequences and provide higher-level APIs for colored text.
a) Rich
The rich
library provides true color and a wide range of features for terminal output, including text styles, gradients, and more.
from rich.console import Console
console = Console()
console.print("[rgb(128,0,128)]This is purple text![/rgb]")
b) Colorama
Colorama
simplifies the use of ANSI escape sequences, and while it doesn't natively support true color, you can combine it with manual escape sequences for extended colors.
3. Using Graphics Libraries for Custom Displays
If you're working outside of a text-based terminal (e.g., GUI, game development, or custom output in a graphical application), libraries like pygame
, tkinter
, or Qt
allow complete control over colors, including those outside ANSI standards.
Example with pygame
:
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
screen.fill((255, 255, 255)) # White background
font = pygame.font.Font(None, 36)
text = font.render('Hello, Non-ANSI Colors!', True, (128, 0, 128)) # Purple text
screen.blit(text, (50, 100))
pygame.display.flip()
# Wait for a few seconds to view the text
pygame.time.wait(5000)
pygame.quit()
4. Windows-Specific Console Colors
If you're on Windows, you can use the ctypes
library to call Windows API functions for setting console colors.
Example using Windows Console API:
import ctypes
# Define colors
STD_OUTPUT_HANDLE = -11
FOREGROUND_PURPLE = 0x05 # Custom purple
# Get handle to console output
handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# Set text color
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_PURPLE)
print("This is a custom color text!")
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, 0x07) # Reset to default
Summary
- For terminal-based true color, use the escape sequence
\033[38;2;R;G;Bm
for foreground and\033[48;2;R;G;Bm
for background. - For ease of use, libraries like
rich
orcolorama
are great choices. - For non-terminal outputs, use graphical libraries like
pygame
,tkinter
, orQt
. - On Windows, you can manipulate the console directly with the Windows API.
Let me know if you'd like to see any of these methods in more detail!