无法在Windows上的curses中更改颜色

2 投票
1 回答
1683 浏览
提问于 2025-04-28 09:25

我在Windows上使用curses库,下载地址是:http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses,我用的是32位的Python 3.4版本。

到目前为止,这个库运行得很好,除了颜色方面的问题。它显示可以改变颜色,但当我实际尝试改变颜色时,什么也没有发生。这是Windows上curses的限制,还是我代码的问题呢?

import curses

def main(stdscr):
    curses.start_color()
    stdscr.addstr("Can Change Color? %s\n" % str(curses.can_change_color()))
    for i in range(0, curses.COLORS):
        curses.init_color(i, 1000, 0, 0)
        curses.init_pair(i + 1, i, 0)
    try:
        for i in range(0, 255):
            stdscr.addstr(str(i), curses.color_pair(i))
    except curses.ERR:
        pass
    stdscr.getch()

curses.wrapper(main)

在这里,它显示可以改变颜色,但当我尝试把所有颜色都设置成红色(作为测试)时,它们依然保持默认颜色。

暂无标签

1 个回答

4

我知道你问这个问题已经有一段时间了,但因为这是在谷歌搜索“python curses 颜色问题”时最先出现的结果之一,所以我想还是回答一下。

这个链接中的回答包含了你所需要的确切解决方案。你不能直接调用 curses.color_pair(i),而是需要先定义这些颜色对:

stdscr = curses.initscr()
curses.start_color()
curses.use_default_colors()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
stdscr.addstr( "Pretty text", curses.color_pair(1) )
stdscr.refresh()

上面的代码会把“Pretty text”这个词显示为红色,背景为白色(但要确保你的控制台支持颜色,记得先调用 curses.has_colors())。

撰写回答