ncurses和白底黑字

8 投票
3 回答
2878 浏览
提问于 2025-04-16 00:59

我在使用curses库的颜色模式时,发现无法实现白色在黑色背景上的显示。如果我不调用start_color,就能看到白色在黑色背景上。但只要一调用start_color,输出的颜色就变成了灰色在黑色背景上。

如果你运行这个脚本:

import sys

for i in xrange(30, 38):
    print '\x1b[0;' + str(i) + 'm' + str(i) + ': Shiny colors \x1b[1m(bright)'
print '\x1b[0m...and this is normal.'

...你可能会看到很多漂亮的颜色。我想要的颜色,且一直无法实现的,就是最后一行:'...这就是正常的。' 不管我请求颜色对0,还是请求COLOR_WHITE和COLOR_BLACK,得到的都是脚本中的非亮色#37。

作为参考,这就是我在Gnome终端中看到的:

http://rpi.edu/~wellir/random/colors.png

我在用Python编程(使用curses库),所以我的代码大概是这样的:

import curses

screen = curses.initscr()
curses.start_color()
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
screen.clear()
screen.attrset(0)
screen.addstr('Hello')
screen.attrset(curses.A_BOLD)
screen.addstr('Hello')
screen.attrset(curses.color_pair(1))
screen.addstr('Hello')
screen.refresh()
curses.napms(5000)
curses.endwin()

...这让我得到了37,37亮色和37。

3 个回答

1

我在gnome终端上也遇到了同样的问题。

我通过以下步骤解决了它:

右键点击屏幕 > 选择配置文件 > 配置文件首选项 > 颜色 > 调色板

我觉得这就是每种颜色对应的样子。

不知道为什么,选中的内置方案Default把第一种颜色设成了灰色,而不是黑色!

把方案改成XTerm,或者把第一种颜色改成黑色就解决了我的问题。

我没有使用curses.use_default_colors

1

你的gnome终端可能有自己的一套颜色方案,这会把默认的白色变成亮白色,除了在curses模式下。要确保gnome-terminal没有改变颜色,因为这样会让你测试颜色变得困难。

5

curses.use_default_colors() 是一个用来设置终端颜色的命令。它的意思是让程序使用终端本身的默认颜色,而不是自己指定的颜色。这样做可以让程序在不同的终端上显示得更自然,适应各种背景和前景颜色。

撰写回答