2016-04-22 1 views
2

Я пишу программу на Python, используя модуль curses в стандартной библиотеке.Пользовательские цвета RGB с проклятиями Python

Я хочу, чтобы моя программа просто выходила, если она не может использовать пользовательские цвета, которые я указываю с тройками RGB.

Так у меня есть некоторый стартовый код, который выглядит следующим образом:

import curses 

def main(stdscr): 
    if not curses.can_change_color(): 
    raise Exception('Cannot change color') 

    curses.init_color(curses.COLOR_BLACK, 999, 0, 0) 
    curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) 
    curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK) 
    stdscr.addstr('hello', curses.color_pair(1)) 
    stdscr.addstr(' world', curses.color_pair(2)) 
    stdscr.getch() 

curses.wrapper(main) 

И результат я получаю:

enter image description here

я ожидал черный быть заменен на красный.

Я недопонимаю docs? Как я могу получить curses, чтобы уважать пользовательские цвета RGB, которые я хочу использовать? Или, по крайней мере, потерпите неудачу и скажите мне, что терминал не поддерживает его?

Документы для проклятий here, похоже, предполагают, что при ошибке он вернет ошибку, а источник CPython, похоже, propagate curses errors довольно верно.

В случае, если это актуально, я нахожусь в OS X 10.11, и я тестирую Python3, установленный с Homebrew. Но я получаю тот же эффект с встроенным интерпретатором Python OS X.

РЕДАКТИРОВАТЬ:

слегка модифицированный пример кода для отображения содержимого цвет:

import curses 

def main(stdscr): 
    if not curses.can_change_color(): 
    raise Exception('Cannot change color') 

    stdscr.addstr(1, 0, repr(curses.color_content(curses.COLOR_BLACK))) 
    curses.init_color(curses.COLOR_BLACK, 999, 0, 0) 
    curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) 
    curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK) 
    stdscr.addstr(0, 0, 'hello', curses.color_pair(1)) 
    stdscr.addstr(' world', curses.color_pair(2)) 
    stdscr.addstr(2, 0, repr(curses.color_content(curses.COLOR_BLACK))) 
    stdscr.getch() 

curses.wrapper(main) 

Результат на этот раз: enter image description here

+0

Можете ли вы проверить до/после с помощью ['curses.color_content'] (https://docs.python.org/3/library/curses.html#curses.color_content)? – usr2564301

+1

@RadLexus Содержимое цвета, по-видимому, обновляется, оно установлено до (0, 0, 0) раньше, а когда установленный флажок установлен (999, 0, 0) – math4tots

+0

Разве 'curses' не поддерживает только поддержку, например , 16 основных цветов, таких как терминалы, когда они были разработаны? –

ответ

1

скриншот может быть Terminal.app; в быстрой проверке он не соблюдает escape-последовательности, используемые для изменения цвета. С другой стороны, iTerm2 использует эти escape-последовательности.

Если вы используете Terminal.app, установка TERM на xterm-256color бессмысленна из-за большого количества различий по сравнению с xterm. В базе данных терминалов есть discussion, так как вы можете найти что-то интересное.

+1

Я нахожусь на данный момент, поэтому проверю его, когда вернусь, но если я правильно запомню документы, я думаю, что оболочка вызывает start_color, если она поддерживается в текущий env – math4tots

Смежные вопросы