Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python诅咒不显示颜色,而C ncurses工作得很好_Python_Ncurses_Curses_Python Curses - Fatal编程技术网

Python诅咒不显示颜色,而C ncurses工作得很好

Python诅咒不显示颜色,而C ncurses工作得很好,python,ncurses,curses,python-curses,Python,Ncurses,Curses,Python Curses,我似乎无法让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.re

我似乎无法让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)
我只能看到“按任意键退出”。我知道“Hello world”是因为新行而写的,但我看不到文本。我尝试了各种颜色对,但只有0,即白色,起作用

不使用包装器,即

  stdscr = curses.initscr()
  curses.start_color()
  main(stdscr)
  curses.endwin()
没有帮助

我在XTerm(312)上测试了它,XTerm(312)有一个黑色背景,而urxvt v9.20有一个白色背景。我在Debian jessie上,使用bash和Python 2.7


我运行了一个使用ncurses的旧C脚本,它可以很好地显示颜色,所以我认为要么我做错了什么,要么python库出了什么问题。我下载了一个名为colortest python的软件包,它也可以显示颜色,尽管它不使用诅咒(仅用于测试终端是否能够显示颜色)。

您需要在开始时添加以下行以初始化颜色

curses.start_color()
curses.use_default_colors()
然后需要使用初始化颜色对

curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
例如,这会将第一对初始化为红色前景和白色背景。
然后使用传递的int值作为函数中的第一个参数,而不是curses.COLORS in curses.color\u pair()中的curses.COLORS,这些颜色将正确显示。

没有帮助。其他颜色对似乎不适用于输出curses.has_colors()?哦,现在我明白了,你不直接使用颜色,你需要声明一个带有curses.init_对的颜色对(1,curses.color_RED,curses.color_WHITE),然后使用curses.color_对(1)中第一个参数中使用的int值。这样应该可以解决问题,但这些颜色对不应该由包装器初始化吗?无论如何,如果你愿意,你可以加上它作为答案,这样我就可以接受。看起来你也得自己做