首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Curses.init_color()不会生效

Curses.init_color()不会生效
EN

Stack Overflow用户
提问于 2017-06-19 11:09:12
回答 1查看 1.2K关注 0票数 7

我正在使用Python curses并尝试使用curses.init_color()初始化一个新的颜色。即使在初始化新的RGB值并将其分配给一个对之后,更改也不会生效。

我的终端支持颜色更改,因为curses.can_change_color()返回True。我还检查了使用curses.color_content()更改的颜色索引-它返回了我在init_color()中指定的RGB值。在开始时,我还调用了一次curses.start_color()。

我是不是遗漏了什么?要使init_color()中的更改生效,我必须做什么?代码如下:

代码语言:javascript
复制
    curses.start_color()
    curses.init_color(17, 200,200,200)

    curses.init_pair(1, curses.COLOR_MAGENTA, curses.COLOR_BLACK)    
    curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK)
    curses.init_pair(3, curses.COLOR_CYAN, curses.COLOR_BLACK)
    curses.init_pair(4, 17, curses.COLOR_BLACK)

    print curses.can_change_color() #returns True
    print curses.color_content(17) #(200,200,200), 
    stdscr.addstr("test",curses.color_pair(4)) #yet this text is blue

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 18:27:34

你的颜色太深了。尝试另一种更明亮的颜色,例如(800,800,0)以看到黄色。

作为documentation states,每个RGB分量可以在0到1000之间变化,所以如果我们将(200,200,200)颜色映射到标准的8位方案,就会得到类似http://colorpeek.com/#rgb(51,51,51)的结果。

您可以运行此演示,并看到init_colorinit_pair和任何其他函数都按预期工作。首先,它打印8种颜色,而每个分量只在0和200之间变化。然后,当组件的范围不同(0、200、400、600、800、1000)时,它会打印更完整的调色板

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import curses


def demo(screen):
    # save the colors and restore it later
    save_colors = [curses.color_content(i) for i in range(curses.COLORS)]
    curses.curs_set(0)
    curses.start_color()

    # use 250 to not interfere with tests later
    curses.init_color(250, 1000, 0, 0)
    curses.init_pair(250, 250, curses.COLOR_BLACK)
    curses.init_color(251, 0, 1000, 0)
    curses.init_pair(251, 251, curses.COLOR_BLACK)

    screen.addstr(0, 20, 'Test colors for r,g,b = {0, 200}\n',
                  curses.color_pair(250) | curses.A_BOLD | curses.A_UNDERLINE)
    i = 0
    for r in (0, 200):
        for g in (0, 200):
            for b in (0, 200):
                i += 1
                curses.init_color(i, r, g, b)
                curses.init_pair(i, i, curses.COLOR_BLACK)
                screen.addstr('{},{},{}  '.format(r, g, b), curses.color_pair(i))

    screen.addstr(3, 20, 'Test colors for r,g,b = {0..1000}\n',
                  curses.color_pair(251) | curses.A_BOLD | curses.A_UNDERLINE)
    for r in range(0, 1001, 200):
        for g in range(0, 1001, 200):
            for b in range(0, 1001, 200):
                i += 1
                curses.init_color(i, r, g, b)
                curses.init_pair(i, i, curses.COLOR_BLACK)
                # screen.addstr('{},{},{} '.format(r, g, b), curses.color_pair(i))
                screen.addstr('test ', curses.color_pair(i))

    screen.getch()
    # restore colors
    for i in range(curses.COLORS):
        curses.init_color(i, *save_colors[i])


if __name__ == '__main__':
    curses.wrapper(demo)

此外,当您使用init_color更改颜色时,请确保在退出程序之前恢复它们,因为即使您退出curses程序(color not ended in curses),当前会话中的终端颜色也不会恢复。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44621718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档