Если линукс-приложение имеет симпатичный интерфейс с кнопочками в текстовом режиме, то обычно считают, что это сделано при помощи curses. Но, как оказывается, пользоваться ей не так-то просто.

Если вы хотите сделать симпатичное переносимое приложение в текстовом режиме, то, возможно, curses не лучший выбор. Да, у вас будет работать и на винде, и на линуксе, и на аналогичных системах. Но какой ценой?

Во-первых, сервис от этой библиотеки довольно ограничен. У нас есть:
-- Управление позицией вывода текста на экран
-- Включение-выключение курсора
-- Цвет текста и фона
-- Псевдо-окна. Окнам можно сделать рамочку
-- Поля ввода
-- Обработка мышки (клики, скролл)

Может показаться, что это немало, но у каждого пункта есть "но". Вот примерный список проблем библиотеки:

-- Вывести текст в правый нижний угол экрана непросто (и я не уверен, что вообще возможно)
-- Во всех функциях первый аргумент -- ИГРЕК, а второй -- икс
-- Гарантированно поддерживается только 8 цветов. На многих терминалах поддерживается большее число, но рассчитывать на это нельзя. Далее, каждый терминал видит эти 8 цветов по-своему. Поэтому если вы сделали симпатичное сочетание, то при запуске другой терминальной программы вы рискуете получить нечто вырвиглазное.
-- Атрибуты типа жирный, мигание поддерживаются, но гарантий что они будут отображаться -- нет.
-- Рамочка у псевдо-окон доступна по-умолчанию только одна, одинарная. Для рисования любой другой надо вручную передать 8 символов, которые будут служить границами. Эта рамочка после рисования сразу забывается, поэтому если вы будете выводить сплошной текст, он будет затирать рамку при переносе строки.
-- Поля ввода поддерживаются, но другие контролы типа кнопок, чекбоксов -- нет. Делайте сами.
-- Скролл мышкой гарантированно работает только в одну сторону, через BUTTON4. Скролл в другую сторону генерирует сигнал, который у меня совпал на видне, на линуксе в ssh через putty и в xfce в эмуляторе терминала. Но у этого кода нету именованной константы. Я его подобрал. Это 0x200000. Как вы понимаете, нету гарантий, что это есть на всех реализациях.
-- Проблемы с передачей сочетаний с Alt и с кнопкой Esc. В винде всё работает идеально (что забавно), а в линуксе после эскейпа идёт пауза 1-2 секунды. Видимо, ждёт ввода эскейп-последовательности. Это, кажется, можно победить. Но получить через терминал готовые сочетания типа "M_a" ("ALT_A") невозможно. Вы сначала получите код 27, потом надо ещё раз вызвать getch(). Возможно, при не-удалённой работе линукса на собственном железе этих проблем не будет, пока не проверил.
-- При работе через ssh надо следить, чтобы тип эмулятора терминала с обоих сторон совпадал. Иначе у вас будут неправильно работать клавиши F1...F12. И не только.
-- При работе в графических эмуляторах терминала происходит перехват части нажатий в пользу менюшек. Это можно отключить, но это геморрой.
-- А заставить в линуксе правильно обрабатывать Home, End пока вообще не вышло. Приходит по 3-4 нажатия. Буду разбираться.
-- Самое неприятное, что разницу в работе вы обнаруживаете только в процессе работы. Я работал с библиотекой через питон. И вот вы запускаете один и тот же исходник на одной и той же системе с одной и той же версией пакета curses -- и получаете разный результат в разных терминалах (и ещё отдельный результат через ssh).
-- Команда изменения размера терминала работает через раз. В винде она отрабатывает правильно (что забавно). В линуксе изменяется виртуальный размер терминала, но реальный -- не всегда. При этом терминальная программа сама решает, какие строчки выводить. Например, она понимает, что такое статусная строка, и будет выводить последнюю строку экрана в приоритете. Но часть другого может не понять. И как мне работать? Пользователь может запустить терминал в размере 10 на 10 символов. Иногда это приводит к падениям программы, если пытаться вывести в границах виртуального экрана, но за границами реального. Хотя вроде вызываешь изменение размера, потом проверяешь -- всё ок. Выводишь символ в разрешённую позицию -- и программа падает. *пингвин кланяется* Это происходит не всегда, в глубинной причине не разобрался.

Выводы:
-- Если ваша основная задача это вывод текста в определённой позиции экрана, то всё хорошо
-- Надеяться на стабильное оформление нельзя
-- Надо рассчитывать на минимум доступных цветов, цветовых пар и прочего. При этом ваш терминал может на самом дел всё поддерживать (например, при игре в NetHack через Putty+SSH я вижу больше цветов, у меня работают все сочетания и автоизменение размера экрана, но библиотека говорит, что больше не может)
-- Удивительно, но неплохо работает мышка, хотя это вообще не основная задача терминала

Мне уже Minoru подсказывал альтернативные библиотеки по работе с экраном (STFL, он пишет, что мёртвый). Тем не менее, если вы знаетете библиотеку, которая позволяет:
1) Работать в питоне и с виндой и с линуксом
2) Делать не только поля ввода, но и менюшки, и кнопки и прочее (привет Turbo Vision)
3) Делать стабильное оформление

То сообщите мне.