Как создать статический обрамленный интерфейс ASCII в Python?

когда я использую less команда в моем терминале Mac мне показан 23-строчный фрагмент указанного файла. Если я перемещаю файл вниз, а затем прокручиваю вверх в окне терминала, я не вижу содержимого файла перед текущим срезом. Вместо этого я вижу команды, которые я набрал перед использованием less.

Я хотел бы использовать этот или подобный эффект для создания игрового интерфейса ASCII, который показывает только текущий экран, без истории. Я бы нарисовал свои рамки на экране и изменил только текст или варианты в этих рамках. Это очень распространено в старых системах, которые работали в основном или полностью в среде командной строки.

есть ли модуль Python, который предлагает это? Это эффект, который я могу или должен реализовать себя?

вот некоторые примеры элементов экрана, которые могут извлечь выгоду из этого эффекта.

+-------------------------------------------------------------------+
|                                                                   |
| Dialog dialog dialog dialog dialog dialog dialog dialog dialog    |
| dialog dialog dialog dialog dialog dialog dialog dialog dialog    |
| dialog dialog dialog dialog dialog dialog dialog dialog dialog    |
| dialog dialog dialog dialog dialog dialog dialog dialog dialog    |
| dialog dialog dialog dialog.                                      |
|                                                                   |
|                                                                   |
|                                                                   |
+--------------------+---------------+------------------------------+
|   Attack           |     South     |            HP/Max   MP/Max   |
| > Cast Magic       |       -       |   Tom:    120/120   60/91    |
|   Use Item         |      New      | > Dick:    27/133   47/47    |
|   Tactics          |  Schwartzton  |   Harry:   87/104   16/113   |
+--------------------+---------------+------------------------------+

4 ответов


Я бы предложил заглянуть в curses модуль. Это интерфейс к ncurses библиотека, которая используется именно для этой цели (я считаю, что в ней написано много терминальных приложений). The документация вполне прилично, и есть несколько хороших уроки это также должно установить Вас в правильном направлении.

(либо это, либо либеральное использование \r.) Я настоятельно рекомендую curses модуль, так как он должен обеспечивают большую гибкость для того, что вы хотите сделать.

EDIT: если вы заинтересованы в создании кросс-платформенного приложения, имейте в виду, что curses модуль доступен только в системах *nix. Согласно документации:

никто не сделал порт Windows модуля curses.

этот учебник рекомендует библиотека для использования в Windows, хотя если даты на странице Скачать какие-либо указания, он не обновлялся в течение достаточного количества времени. Вы могли бы заглянуть в модуль, который выглядит значительно более поздние.


то, о чем вы говорите, это curses. Это модуль Python, который взаимодействует с ncurses. Лучший учебник, который я нашел для использования curses Это один:http://www.dev-explorer.com/articles/python-with-curses

некоторые популярные программы, которые используют проклятия (хотя и с другого языка) являются aptitude и nano.


Я тоже боролся с этой проблемой. Я хотел простое кросс-платформенное решение, поэтому я расширил asciimatics представлять виджеты для создания UIS на основе формы, как это. Например:

Text UI widgets

полученный код должен быть достаточно кратким и работать на любой современной ОС (включая Windows, Linux и OSX) без установки дополнительных собственных библиотек. Как вы можете видеть из список контактов образец стандартные виджеты легко выложить и должны обеспечить большинство ваших потребностей.


Если вы хотите сделать игру ascii, asciimatics, вероятно, не будет работать, так как это в основном для таких вещей, как формы. Использование проклятий-это определенно путь. Хотя нет официального порта проклятий для windows, есть хороший неофициальный порт в https://www.lfd.uci.edu/%7Egohlke/pythonlibs/#curses, поэтому обязательно проверьте это.