Python curses 不显示颜色,而 C ncurses 工作正常
Python curses not displaying colors, whereas C ncurses works fine
我似乎无法让 Python curses 模块显示颜色,而 ncurses C 库工作正常。这是一个应该可以工作的简单脚本:
import curses
def main(stdscr):
if not curses.has_colors(): raise
stdscr.addstr("Hello world\n", curses.color_pair(curses.COLOR_RED))
stdscr.addstr("Press any key to exit.\n")
stdscr.refresh()
while stdscr.getch() == -1: pass
if __name__ == '__main__':
curses.wrapper(main)
我只能看到"Press any key to exit."。我知道 "Hello world" 由于新行而被写入,但我看不到文本。我尝试了各种颜色对,但只有 0,即白色,有效。
不使用包装器,即
stdscr = curses.initscr()
curses.start_color()
main(stdscr)
curses.endwin()
没有帮助。
我在 XTerm(312) 和 urxvt v9.20 上测试过,它的背景是黑色的,而 urxvt v9.20 是白色的。我在 Debian jessie 上,使用 bash 和 Python 2.7.
我运行了一个使用 ncurses 的旧 C 脚本,它很好地显示了颜色,所以我假设要么我做错了什么,要么 python 库有问题。我下载了一个名为 colortest-python 的包,它也能显示颜色,尽管它没有使用 curses 来显示颜色(只是为了测试终端是否能够显示颜色)。
您需要在开头添加以下行来初始化颜色
curses.start_color()
curses.use_default_colors()
然后您需要使用
初始化颜色对
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
例如,这会将第一对初始化为红色前景和白色背景。
之后,您使用传递的 int 值作为函数中的第一个参数而不是 curses.color_pair() 中的 curses.COLORS,颜色将正确显示。
我似乎无法让 Python curses 模块显示颜色,而 ncurses C 库工作正常。这是一个应该可以工作的简单脚本:
import curses
def main(stdscr):
if not curses.has_colors(): raise
stdscr.addstr("Hello world\n", curses.color_pair(curses.COLOR_RED))
stdscr.addstr("Press any key to exit.\n")
stdscr.refresh()
while stdscr.getch() == -1: pass
if __name__ == '__main__':
curses.wrapper(main)
我只能看到"Press any key to exit."。我知道 "Hello world" 由于新行而被写入,但我看不到文本。我尝试了各种颜色对,但只有 0,即白色,有效。
不使用包装器,即
stdscr = curses.initscr()
curses.start_color()
main(stdscr)
curses.endwin()
没有帮助。
我在 XTerm(312) 和 urxvt v9.20 上测试过,它的背景是黑色的,而 urxvt v9.20 是白色的。我在 Debian jessie 上,使用 bash 和 Python 2.7.
我运行了一个使用 ncurses 的旧 C 脚本,它很好地显示了颜色,所以我假设要么我做错了什么,要么 python 库有问题。我下载了一个名为 colortest-python 的包,它也能显示颜色,尽管它没有使用 curses 来显示颜色(只是为了测试终端是否能够显示颜色)。
您需要在开头添加以下行来初始化颜色
curses.start_color()
curses.use_default_colors()
然后您需要使用
初始化颜色对curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
例如,这会将第一对初始化为红色前景和白色背景。 之后,您使用传递的 int 值作为函数中的第一个参数而不是 curses.color_pair() 中的 curses.COLORS,颜色将正确显示。