2015-01-09 6 views
0

ncurses C 라이브러리가 잘 작동하는 반면 Python curses 모듈에서 색상을 표시하는 것처럼 보이지 않습니다. 다음은 작동해야하는 간단한 스크립트입니다.파이썬 curses는 색상을 표시하지 않지만 C ncurses는 정상적으로 작동합니다.

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() 

이 도움이되지 않았다 즉, 래퍼를 사용하지 않습니다.

흰색 검정색 bg가있는 XTerm (312) 및 흰색이있는 urxvt v9.20에서 테스트했습니다. Debian jessie에서 bash와 Python 2.7을 사용하고 있습니다.

ncurses를 사용하는 오래된 C 스크립트를 실행하여 색상이 멋지게 표시되므로 잘못된 작업을하거나 파이썬 라이브러리에 문제가있는 것으로 가정합니다. colortest-python이라는 패키지를 다운로드했는데 curses를 사용하지는 않지만 색상을 표시 할 수있었습니다 (터미널이 색상을 표시 할 수 있는지 테스트 할 때만).

답변

1

당신은 색상

그런 다음 빨간색 전경과 흰색의 첫 번째 쌍을 초기화합니다

curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) 

이와 색상 쌍을 초기화 O를 필요

curses.start_color() 
curses.use_default_colors() 

를 초기화하는 시작 부분에 다음 줄을 추가해야 배경 예를 들어. 그런 다음 curses.color_pair()에서 curses.COLORS 대신 함수의 첫 번째 arg로 전달한 int 값을 사용하면 색상이 제대로 표시됩니다.

+0

도움이되지 않았습니다. [전체 스크립트] (http://pastebin.com/70PJJN81). 다른 색상 쌍이 작동하지 않는 것 같습니다 – Alex

+0

curses.has_colors()는 무엇을 출력합니까? –

+0

오, 이제 색상을 직접 사용하지 않고 curses.init_pair (1, curses.COLOR_RED, curses.COLOR_WHITE)와 쌍을 선언 한 다음 첫 번째 arg에서 사용하는 int 값을 사용해야합니다. curses.color_pair (1). 그 방법은 작동해야합니다 –