我不能让终端调色板与咒语一起工作。
import curses
def main(stdscr):
curses.use_default_colors()
for i in range(0,7):
stdscr.addstr("Hello", curses.color_pair(i))
stdscr.getch()
curses.wrapper(main)
此python脚本将显示以下屏幕:
但是,我的gnome终端调色板中有更多的颜色。我如何在咒语中访问它们?
发布于 2013-09-08 21:27:59
终端“调色板”由终端应用程序自己设置,以将默认的curses颜色映射到特定于应用程序的“解释”。如果您使用红色,终端可以选择将其显示为酒红色或樱桃红色,或者如果用户愿意,则显示完全不同的内容。
换句话说,只需使用诅咒颜色(结合或不结合明亮或闪烁修饰符),事情应该会正常工作。
我认为curses.use_default_colors()
调用只是让透明度变得可用;它是对use_default_colors()
ncurses API function的直接调用。ncurses颜色是基于调色板的;您需要使用curses.init_pair()
calls设置您自己的每对编号的颜色属性,然后使用curses.color_pair()
从调色板中选择一个颜色对以显示具有该特定对的文本;或者直接为给定的addstr()
调用构建文本属性。
发布于 2013-09-08 20:08:45
我现在把这几行放在我的脚本前面。
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i, i, -1);
我不知道这是不是最好的解决方案,但至少它产生了一些与终端调色板一致的颜色对。
发布于 2017-01-07 01:41:46
我没有将此作为评论提交给Chiel ten Brinke的优秀答案的代表点,所以我将在这里提供他的颜色脚本的一个更有用的版本:
import curses
def main(stdscr):
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
stdscr.addstr(0, 0, '{0} colors available'.format(curses.COLORS))
maxy, maxx = stdscr.getmaxyx()
maxx = maxx - maxx % 5
x = 0
y = 1
try:
for i in range(0, curses.COLORS):
stdscr.addstr(y, x, '{0:5}'.format(i), curses.color_pair(i))
x = (x + 5) % maxx
if x == 0:
y += 1
except curses.ERR:
pass
stdscr.getch()
curses.wrapper(main)
https://stackoverflow.com/questions/18551558
复制相似问题