如何以编程方式更改Python的背景色';将整个控制台屏幕转换为特定的RGB颜色?

如何以编程方式更改Python的背景色';将整个控制台屏幕转换为特定的RGB颜色?,python,cmd,colors,background,windows-10,Python,Cmd,Colors,Background,Windows 10,我希望能够将Python控制台(Python.exe)的背景颜色更改为任何RGB颜色 我知道我可以使用“颜色”命令(和)从16种可用颜色中选择背景和前景(字体)颜色: import os os.system('color 8f') 我还知道,我可以通过右键单击控制台的顶部栏,然后单击“属性”并转到“颜色”选项卡,手动更改这16种颜色的RGB值 我想知道是否有一个程序化的解决方案,就像针对: 我要的是整个控制台屏幕的背景色,而不是背景色。我也不想在不了解如何操作的情况下安装不同的控制台或模

我希望能够将Python控制台(Python.exe)的背景颜色更改为任何RGB颜色

我知道我可以使用“颜色”命令(和)从16种可用颜色中选择背景和前景(字体)颜色:

import os

os.system('color 8f')

我还知道,我可以通过右键单击控制台的顶部栏,然后单击“属性”并转到“颜色”选项卡,手动更改这16种颜色的RGB值

我想知道是否有一个程序化的解决方案,就像针对:


我要的是整个控制台屏幕的背景色,而不是背景色。我也不想在不了解如何操作的情况下安装不同的控制台或模块。

我发现我可以使用和函数以编程方式更改控制台16种颜色中任何一种颜色的值

下面的代码是问答中的代码组合:

第一种颜色(默认为黑色)是正在更改的颜色,因为它是16种颜色中用作背景色的默认颜色


如果您需要更新屏幕颜色,例如在程序开始时,您只需执行
os.system('cls')
(在
SetConsoleScreenBufferInfoEx
之后)。

您是在问如何更改IDLE的背景颜色吗?@wwii不是IDLE shell(来自
C:\Users\Username\AppData\Local\Programs\Python38-32\pythonw.exe“C:\Users\Username\AppData\Local\Programs\Python\Python38-32\Lib\idlelib\idle.pyw”
)。Python.exe是一个(
C:\Users\Username\AppData\Local\Programs\Python\Python38-32\Python.exe
)。
import os

os.system('')

def rgb(red, green, blue):
  return f'\x1b[38;2;{red};{green};{blue}m'

red_color = rgb(255, 0, 0)
green_color = rgb(0, 255, 0)
blue_color = rgb(0, 0, 255)

print(f'{red_color}red {green_color}green {blue_color}blue')
import ctypes
from ctypes import wintypes
import os
import sys
import time

class COORD(ctypes.Structure):
  _fields_ = (('X', wintypes.SHORT), ('Y', wintypes.SHORT))

class CONSOLE_SCREEN_BUFFER_INFOEX(ctypes.Structure):
  _fields_ = (
    ('cbSize', wintypes.ULONG),
    ('dwSize', COORD),
    ('dwCursorPosition', COORD),
    ('wAttributes', wintypes.WORD),
    ('srWindow', wintypes.SMALL_RECT),
    ('dwMaximumWindowSize', COORD),
    ('wPopupAttributes', wintypes.WORD),
    ('bFullscreenSupported', wintypes.BOOL),
    ('ColorTable', wintypes.DWORD * 16))
  def __init__(self, *args, **kwds):
    super(CONSOLE_SCREEN_BUFFER_INFOEX, self).__init__(*args, **kwds)
    self.cbSize = ctypes.sizeof(self)

def rgb_values_to_integer_color(red, green, blue):
  integer_color = red + (green * 256) + (blue * 256 * 256)
  return integer_color

STD_OUTPUT_HANDLE = -11
console_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
console_screen_information = CONSOLE_SCREEN_BUFFER_INFOEX()

# get the original color to later set it back
ctypes.windll.kernel32.GetConsoleScreenBufferInfoEx(console_handle, ctypes.byref(console_screen_information))
original_color = console_screen_information.ColorTable[0]

# prevent the console screen's height from shrinking
console_screen_information.srWindow.Bottom += 1

# set the new rgb color
console_screen_information.ColorTable[0] = rgb_values_to_integer_color(red=84, green=170, blue=255)
ctypes.windll.kernel32.SetConsoleScreenBufferInfoEx(console_handle, ctypes.byref(console_screen_information))

# wait 3 seconds
time.sleep(3)

# change back to the original color
console_screen_information.ColorTable[0] = original_color
ctypes.windll.kernel32.SetConsoleScreenBufferInfoEx(console_handle, ctypes.byref(console_screen_information))