Аналог curses для windows

Обновлено: 05.07.2024

В этом месяце мы поговорим об использовании Curses в Python. Нет, мы не собираемся использовать Python для ругательств грязными словечками, однако и такое возможно, если вы действительно захотите. Мы говорим об использовании библиотеки Curses с целью приукрасить окно вывода.

В любом случае, давайте сразу начнём и создадим нашу первую программу с использованием Curses. (Справа сверху). Просмотрите код, а затем я вам всё объясню.

Коротко, но просто. Давайте просмотрим код строчку за строчкой. Первым делом мы импортируем пакеты, с кото-рыми вы уже знакомы. Далее, создаём новый объект Curses, инициализируем и называем его myscreen (myscreen = curses.initscr()). Это — наш «холст», на котором мы будем рисовать. Далее мы используем команду myscreen.border(0), чтобы нарисовать контур вокруг «холста». Это делать не обязательно, но так выглядит посимпатичнее. Добавляем метод addstr для «написания» некоторого текста на поле начиная с 25 позиции 12 строчки. Воспринимайте метод .addstr как функцию print для Curses. Наконец метод .refresh() делает нашу работу видимой. Если не обновить экран, то мы не увидим внесённых изменений. Далее ждём, когда пользователь нажмёт любую клавишу (.getch), и передаём управление экраном системе (.endwin) для продолжения нормальной работы в терминале. Функция curses.endwin() ОЧЕНЬ важна и, если её не вызвать, то терминал останется в большом беспорядке. Так что удостоверьтесь, что вызвали эту функцию в конце вашего приложения.

Сохраните эту программу как «CursesExample1.py» и запустите в терминале. Один нюанс: всякий раз при добавле-нии контура он занимает по одной «доступной» клетке на каждый символ контура. Кроме того, отсчёт позиций линий и символов начинается с НУЛЯ. Это означает, что первая линия границы — это нулевая строчка на экране, а последняя линия — это 23 строчка. Следовательно, крайняя левая верхняя пози-ция — это (0,0), а крайняя пра-вая нижняя — (23,79). Давайте покажем это на примере (cправа сверху). Всё достаточно просто, за исключением блоков try/finally. Помните, я говорил, что curses.endwin() — это ОЧЕНЬ важная функция и её нужно обязательно вызывать в конце кода? Так вот, в данном случае, если дела пойдут очень плохо, будет вызвана функция endwin. Существует множество спосо-бов вызвать эту функцию, но этот мне кажется достаточно простым.

Теперь давайте создадим красивое меню. Если вы припом-ните, мы писали программу «Поваренная книга», у которой было меню (Программа на Python — Часть 8). Когда мы что-то набирали, всё содержимое просто прокручивалось вверх. Сейчас мы, используя вышеска-занное, сделаем модель меню, чтобы приукрасить «Поваренную книгу». Ниже приведён старый кусок кода.

На этот раз мы будем использовать Curses. Начнём со следующего шаблона. Вероятно вам захочется сохранить этот фрагмент (справа снизу) для использования в своих будущих программах.

Сохраните шаблон как «cursesmenu1.py». Теперь мы можем работать с файлом, сохраняя шаблон.

Прежде чем мы пойдём дальше по нашему коду, давайте рассмотрим его по блокам. Здесь на псевдокоде написано то, что мы хотим сделать.

Конечно, этот псевдокод всего лишь… псевдо. Но он даёт нам представление о том, что мы хотим сделать. Поскольку это всего лишь пример, мы дойдём только до этого момента, но вы можете взять шаблон целиком. Давайте начнём с основного цикла (посередине справа).

Кода здесь немного. Мы имеем только блоки try/finally, так же, как они представлены в шаблоне. Инициализируем экран Curses и вызываем функцию LogicLoop. Этот код показан в нижнем правом углу.

И вновь, кода немного, но это только образец. Здесь мы вызываем две функции: DoMainMenu и MainInKey. DoMainMenu (справа) выводит наше меню на экран, а MainInKey управляет всем остальным.

Заметьте, что эта функция не делает ничего кроме очистки экрана (myscreen.erase), и затем выводит на экран то, что нам нужно. Обработкой событий ввода с клавиатуры мы тут не занимаемся. Этим занимается функция MainInKey, которая показана на следующей странице.

Эта функция действительно проста. Цикл while выполняется до тех пор, пока пользователь не нажал клавишу «0» (ноль). Внутри цикла мы сравниваем её с различными значениями. В зависимости от результата выполняются определённые действия и вызывается главное меню. Эти действия вы уже и сами можете добавить в код. Давайте лучше посмотрим на пункт 2, «Search for a Recipe». С самим меню всё понятно, а вот с функцией Inkey2 (справа) посложнее.

Вновь мы используем стан-дартный цикл while. Используем выражение doloop = 1 для обеспечения бесконечного цикла while и команду break для выхода из цикла. Три элемента выбора очень похожи. Главное их отличие в том, что мы начинаем с переменной tmpstr и затем добавляем к ней текст из выбранного пункта, делая меню более дружелюбным. Далее вызываем функцию GetSearchLine для получения текста поиска. Функция getstr используется для получения строки целиком, а не только отдельных символов. Полученную строку мы в дальнейшем используем.

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

Но вот со вводом полная беда. Мне нужна система ввода, которая давала бы полный контроль над клавиатурой и мышью, оповешала о нажатии/отпускании определенных клавиш по скан-кодам, предоставляла полный контроль над клавишами-модификаторми (alt, ctrl) и при этом без проблем работала опять же с юникодом в случае ввода в нелатинской локали. Судя по описании хорошо подходит gii, но она сильно наворочена, возможно даже излишне, а существующие биндинги к питону (с говорящим названием piggy) совершенно неадекватны, а писать свои биндинги я банально не потяну.

Есть у кого какие соображения?


>Имею наполеоновские планы начать довольно серьезный проект консольного приложения

Что за проект-то?

Полнофункциональный аналог старого доброго TurboVision (то есть полноценный оконный интерфейс в текстовом (читай - консольном) режиме) средствами Питона и потом уже довольно массивное приложение на нем написанное (пока не буду распространяться, какое).

ЗЫ. Существующие биндинги к, собственно, TurboVision не катят. Тем более, что они тоже завязанны на сраный ncurses, от одного вида которого со мной нервный тик случается.


Кстати, тоже давно интересует альтернатива. Хотя у меня планы маленькие, наконец, сделать приличный консольный файловый менеджер :) Но ncurses в Питоне очень уж нетороплив, ощущения неприятные.


> ncurses в Питоне очень уж нетороплив, ощущения неприятные.

В чём это заключается?


может плагин для vim прикрутишь? или тебе скиллы прокачать тоже?

>Хотя у меня планы маленькие, наконец, сделать приличный консольный файловый менеджер :

Ты не поверишь, у меня ровно аналогичные планы. =) Так что если что, предлагаю скооперироваться. Да, а ncurses в питоне не катит не только по причине тормознутости, а по иной, гораздо более важной причине - по умолчанию питон слинкован с библиотекой ncurses, которая не понимает юникода, а не с ncursesw, в которой utf-8 таки работает. Не требовать же от конечного пользователя перекомпилировать интерпретатор, чтобы тот заработал с твоим поделием, ибо абсурд!


> но увы никак не могу связаться с автором для уточнения ряда интересующих меня вопросов.

>newt попробуй

Выглядит интересно, а как у него дела обстоят с utf-8? И да, в принципе библиотеку всех этих виджетов я хочу написать с нуля на чистом питоне, так что мне бы чего нибудь более низкоуровневого для прямой работы с экраном. А как у него дела с вводом? Можно с клавиатурой на низком уровне работать?

Извините. Я, конечно, извращенец тот еще, но не настолько же! =)))

Встраивать в интерпретатор питона еще один интерпретатор - тоже то еще извращение. Но с другой стороны судя по тому, что я посмотрел, в него встроена библиотека по низкоуровневой работе с выводом и (что более важно для меня) - ввода. Ее бы слинковать с питоном, если она в самом деле соответствует моим ожиданием, было бы интересно. Кстати, именно ввод меня в данный момент интересует больше всего, но по поводу его я пока еще дельных советов так и не получил.

>могу связать с автором, когда он в ирц вылезет

Было бы неплохо. Хотя там у него в профиле сайт указан, на котором таки наконец-то я узрел его мыло. Пойду намылю. :)

>есть как минимум 2 версии turbovision под линукс

В смысле, родного турбовижна? Мне они не подходят по ряду причин. Ибо во первых в данный момент меня интересует прежде всего гибкость написания кода, так что привязывать себя к С-стилю я не считаю надобным. Во вторых они чаще всего реализованы на все том же curses, отказом от которого я считаю принципиальным моментом, ибо нефиг. В третих так как там у них дела обстоят с поддержкой юникода? Вот то-то и оно.

Имхо легче оно все в пайтон-стайл с нуля переписать, чем старое наследие дремучих лет в наследство тянуть. Или я не прав?


>Ты не поверишь, у меня ровно аналогичные планы. =) Так что если что, предлагаю скооперироваться.

Ок, я не против. Но, учитывая мои нынешние темпы работы по сторонним проктам, вряд ли реально займусь этим вопросом в ближайшие пол-года - год :)

>Ок, я не против. Но, учитывая мои нынешние темпы работы по сторонним проктам, вряд ли реально займусь этим вопросом в ближайшие пол-года - год :)

А раньше и по любому не получится. Это время в лучшем случае на разработку начальной версии тулкита уйдет еще ДО начала, собственно, работы над самим файловым менеджером.

Вот собсно я и есть тот самый автор termbox. Да я тоже хочу написать приличный файловый менеджер и изначально термбокс писался именно для этих целей. Но как вы сами понимаете, получился только termbox, а faraway (рабочее название файлого менеджера) не начался даже особо.

Тем не менее, я считаю, что имея тот набор клавиш, который однозначно работает (в сурцах термбокс где-то есть файл с описанием того, что работает и почему). Можно сделать прекрасный GUI! Vim, Emacs тому примеры.

По поводу файлого менеджера на питоне - не смешите мои тапочки. Напишите какой-нибудь никому не нужный lfm клон. Итак на головы линуксоидов сыпется куча недософта. Жаль конечно, что у нас нет своего Евгения Рошала.

Ну вот и славненько! Я сейчас копаю в сторону S-Lang, ибо уже в двух местах мне на него указали с таким намеком, что многие программисты используют его вместо curses (хотя я пока еще смутно себе представляю, зачем нужно спаивать питон с еще одним интерпретируемым языком).

Termbox мне показался хорош, во всяком случае мы запустили его удаленно по ssh заставив выводить кучу всяких нужных utf-8 символов (кириллицу, символы псевдографики, диактрики латышского, китайские иероглифы). В плане вывода неясна лишь пара моментов. Во первых можно ли как в curses определить момент смены разрешения экрана? Во вторых, можно ли определить ширину выводимого символа, ибо в случае с восточно-азиатскими языками один символ занимает не одну, а сразу две ячейки. В третих я уже почти не питаю надежд на этот счет, но все же реально ли получить содержимое консоли ДО инициализации перехода в режим библиотеки? Как я понял, ndn пытается для этого использовать средства vesa, но в других режимах работы терминала оно не работает, увы.

А что касается ввода, то набор доступных клавиш, конечно же, немал. Но я не свой интерфейс писать планирую, а клонировать интерфейс уже существующей программы и там есть очень значимые хоткеи, которые в термбоксе, увы, не работают. Как например ctrl+ins и shift+ins. Да, о невозможности работы на низком уровне это, конечно же, неприятная новость. Но с другой стороны, в документации к gii утверждается, что оно его умеет и очень этим оно гордиться (другое дело, что мне пока еще не удалось его скомпилировать, ага). То есть как-то оно наверное возможно же!

З.Ы. И да. Говоря о файловом менеджере на питоне никто клон никакого lfm делать даже думать не пытается, вообще в сторону mc да и вообще в целом nc-клонов никто даже не смотрит. Существовали же файловые менеджеры с принципиально иным подходом к интерфейсу!

> Во первых можно ли как в curses определить момент смены разрешения экрана?

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

Это они сами виноваты, что у них всё через жопу. У арабов тоже справа на лево.

Удачи вам, я уже понял, что ничего у вас не получится. :)

Еще одну вещь спросить забыл. Там в исходникак termbox'а определено 8 цветов, а мне точно потребуются все 16. Сложно ли будет определить такие цвета, как темно-серый и светло-серый и тому подобное?

>Удачи вам, я уже понял, что ничего у вас не получится. :)

Всегда любил ЛОР за непередаваемый оптимизм! =)

> Еще одну вещь спросить забыл. Там в исходникак termbox'а определено 8 цветов, а мне точно потребуются все 16. Сложно ли будет определить такие цвета, как темно-серый и светло-серый и тому подобное?

В терминале 8 цветов и модификатор BOLD. Ещё там какие-то сюрпризы были с бакграундом я не помню. Вроде не во всех терминалах бакграунд имеет все эти 16 цветов, а только 8.

>В терминале 8 цветов и модификатор BOLD

Правильно ли я понимаю, что модификатор BOLD обозначает вывод символов болдовым шрифтом и на цвет никак не влияет?

Рассматривать использование PDcurses будем на примере Dev-Cpp . Если у вас ещё нет этой IDE, то бежим сюда, скачиваем, устанавливаем.

Получение PDcurses

PDcurses в формате .zip можно скачать тут.

Компиляция PDcurses

PDcurses распространяется в форме исходного кода. То есть перед использованием библиотеки её нужно скомпилировать. Чтобы это сделать нужен компилятор MinGW (который, как и PDcurses , является аналогом компилятора UNIX -систем, gcc ).

Первым делом распаковываем архив, к примеру в папку, куда вы установили Dev-Cpp , в моём случае это C:\Dev-Cpp\ . Лучше не прямо в эту папку, а, например, в папку . \Dev-Cpp\curses\ , так будет удобнее.

Для компиляции можно воспользоваться компилятором, который идёт вместе с Dev-Cpp , но у меня он неправильно компилировал эту библиотеку (не спрашивайте, не знаю почему). Поэтому я воспользовался сторонним MinGW -компилятором, скачанным из интернета (найдёте сами, если понадобится, не маленькие уже :)

Заходим в командную строку и набираем:

Эта команда добавит в path путь к папке bin вашего компилятора. Теперь идём в папку, куда вы распаковали архив с исходниками библиотеки и переходим в папку win32 . В этой папке находится makefile, который создан для упрощения сборки, его имя mingwin32.mak . Его нужно передать программе mingw32-make , чтобы она скомпилировала библиотеку. Делается это так:

После выполнения этой команды начнётся компиляция PDcurses , нужно немного подождать. После окончания компиляции в папке появятся два файла — pdcurses.a и panel.a , это статические библиотеки, предназначенные для компоновщика, они то нам и нужны.

Теперь мы должны перенести эти два файла в папку со статическими библиотеками вашего компилятора. Для Dev-Cpp это папка . \DevCpp\MinGW64\lib\ . Так же в папке, в которую вы распаковали PDcurses есть заголовочный файл curses.h . Его нужно перенести в папку с заголовочными файлами вашего компилятора. Для Dev-Cpp это папка . \Dev-Cpp\MinGW64\x86_64-w64-mingw32\include . Теперь PDcurses готова к использованию.

Тестирование PDcurses

Для проверки напишем программу, выводящую на экран «Hello, World!», начиная с координаты (5;5)

Для это создадим в Dev-Cpp проект Console Application (консольное приложение) и назовём его, к примеру, «curses».

Создадим файл main.cpp (можно называть как угодно) и напишем в нём:

Теперь нужно добавить библиотеку pdcurses.a . Для этого перейдём в Проект->Параметры проекта->Параметры->Добавить библиотеку . Выберем файл pdcurses.a из папки . \DevCpp\MinGW64\lib .

В главе 5 вы узнали, как улучшить управление вводом символов и как обеспечить вывод символов способом, не зависящим от особенностей конкретного терминала. Проблема использования общего терминального интерфейса (GTI или termios) и манипулирование escape-последовательностями с помощью tparm и родственных функций заключается в необходимости применения большого объема программного кода низкого уровня. Для многих программ предпочтительней интерфейс высокого уровня. Мы хотели бы иметь возможность просто рисовать на экране и применять библиотеку функций для автоматического отслеживания аппаратных характеристик терминала.

В этой главе вы узнаете именно о такой библиотеке, называемой curses. Стандарт curses очень важен как компромисс между простыми "строковыми" программами и полностью графическими (которые обычно труднее программировать) программами в графической оболочке X Window System, такими как GTK+/GNOME и Qt/KDE, В ОС Linux есть библиотека svgatib (Super VGA Library, библиотека низкоуровневой графики), но она не является стандартной библиотекой UNIX, поэтому обычно не доступна в других UNIX-подобных операционных системах.

Библиотека curses применяется во многих полноэкранных приложениях как довольно легкий и аппаратно-независимый способ разработки полноэкранных, хотя и символьных программ. Такие программы почти всегда легче писать с помощью библиотеки curses, чем непосредственно применять escape-последовательности. Эта библиотека также может управлять клавиатурой, обеспечивая легкий в использовании, не блокирующий режим ввода символов.

Вы можете столкнуться с тем, что несколько примеров из этой главы не всегда будут отображаться на простой консоли Linux так, как вы ожидали. Бывают случаи, когда сочетание библиотеки curses и определения консоли терминала получается немного не согласованным и приводит в результате к несколько странным компоновкам при использовании curses. Но если для отображения вывода применить графическую оболочку X Window System и окно xterm, все встанет на свои места.

В этой главе обсуждаются следующие темы:

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

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

Поскольку curses — это библиотека, для ее применения необходимо включить в программу заголовочный файл, объявления функций и макросы из соответствующей системной библиотеки. Существует несколько разных реализаций библиотеки curses. Первоначальная версия появилась в системе BSD UNIX и затем была включена в разновидности UNIX стиля System V прежде, чем была стандартизована группой X/Open. Система Linux использует вариант ncurses ("new curses") — свободно распространяемую версию System V Release 4.0 curses, разработанную для Linux. Эта реализация хорошо переносится на другие версии UNIX, хотя и содержит несколько непереносимых дополнительных функций. Есть даже версии библиотеки для MS-DOS и Windows. Если вы увидите, что библиотека curses, поставляемая с вашей версией системы UNIX, не поддерживает некоторые функции, попытайтесь получить копию альтернативной библиотеки ncurses. Обычно пользователи ОС Linux обнаруживают уже установленную библиотеку ncurses или, по крайней мере, ее компоненты, необходимые для выполнения программ на базе библиотеки curses. Если инструментальные библиотеки для нее заранее не установлены в вашем дистрибутиве (нет файла curses.h или файла библиотеки curses для редактирования связей), для большинства основных дистрибутивов их всегда можно найти в виде стандартного пакета с именем наподобие ibncurses5-dev.

Примечание

В стандарте X/Open определены два варианта curses: базовый и расширенный. Расширенный вариант библиотеки curses содержит разнородную кучу дополнительных функций, включая ряд функций для обработки многостолбцовых символов и подпрограммы управления цветом. Кроме приведенного далее в этой главе описания способов управления цветом, мы будем в основном привязаны к функциям базовой версии библиотеки.

При компиляции программ, использующих curses, следует подключить заголовочный файл curses.h и на этапе редактирования связей саму библиотеку с помощью аргумента -lcurses. Во многих системах Linux вы можете применять просто библиотеку curses, а потом обнаружить, что на самом деле вы пользуетесь усовершенствованной, более новой реализацией ncurses.

Для того чтобы проверить, как установлена библиотека curses в вашей системе, выполните команду

для просмотра заголовочных файлов и

для проверки библиотечных файлов. Если вы увидите, что curses.h и ncurses.h — прямо связанные файлы, и существует файл библиотеки ncurses, то у вас есть возможность компилировать файлы из этой главы с помощью следующей команды:

Если установка curses в вашей системе не использует автоматически ncurses, вы сможете явно задать использование ncurses, включив файл ncurses.h вместо файла curses.h и выполнив следующую команду:

$ gcc -I/usr/include/ncurses program.с -о program -lncurses

в которой опция

Примечание

В загружаемом коде сценария Makefile предполагается, что в установленной у вас системе по умолчанию применяется библиотека curses, поэтому вы должны заменить его или откомпилировать вручную, если в вашей системе это не так.

Если вы точно не знаете, как установлена библиотека curses в вашей системе, обратитесь к страницам интерактивного справочного руководства, посвященным ncurses, или просмотрите другую интерактивную документацию; обычное место ее хранения — каталог /usr/share/doc/, в котором вы найдете каталог curses или ncurses часто с присоединенным в конце номером версии.

Подпрограммы curses действуют на экранах, в окнах и вложенных окнах или подокнах. Экран — это устройство (обычно экран терминала, но может быть и экран эмулятора терминала xterm), на который вы записываете информацию. Он занимает все доступное пространство дисплея этого устройства, Если экран — окно терминала в графическом окне, то он представляет собой совокупность всех доступных символьных позиций в окне терминала. Всегда существует, по крайней мере, одно окно curses с именем

совпадающее по размеру с физическим экраном. Вы можете создавать дополнительные окна с размером, меньшим, чем размер экрана. Окна могут накладываться друг на друга и иметь много вложенных окон, но каждое из них всегда должно находиться внутри родительского окна.

Библиотека curses поддерживает две структуры данных, действующие как отображение экрана терминала:

наиболее важная из двух, обновляется, когда функции curses формируют вывод. Структура данных — "стандартный экран". Она действует во многом так же, как стандартный вывод stdout из библиотеки stdio. Эта структура — стандартное окно вывода в программах, использующих библиотеку curses. Структура но хранит внешний вид отображаемого в текущий момент экрана. Вывод, записанный в структуру не появляется на экране до тех пор, пока программа не вызовет функцию использует различия между этими двумя структурами для обновления экрана.

Некоторым программам с использованием curses нужно знать, что библиотека поддерживает структуру

которая применяется в нескольких функциях curses как параметр. Однако действительная структура реализуется по-разному, и к ней никогда не следует обращаться напрямую. У программ с использованием curses практически нет нужды в применении структуры

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

1. Используется функция библиотеки curses для обновления логического экрана.

2. Запрашивается у библиотеки curses обновление физического экрана с помощью функции

Преимущество двухшагового подхода помимо большей легкости при программировании — очень эффективный вариант обновления экрана curses. Это может быть не столь важно для экрана консоли, но становится существенным показателем, если программа выполняется через медленное сетевое соединение.

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

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

Макет логического экрана — это символьный массив, упорядоченный по строкам и столбцам, с начальной позицией экрана (0, 0) в левом верхнем углу (рис. 6.1).


Во всех функциях библиотеки curses применяются координаты со значением у (строки) перед значением х (столбцы). Каждая позиция хранит не только символ, расположенный в этом месте экрана, но и его атрибуты. Атрибуты, которые можно отобразить, зависят от физических характеристик терминала, но, как правило, они включают жирное начертание и подчеркивание символа. На консолях Linux вам также доступны негативное изображение и цвет, о которых речь пойдет далее в этой главе.

Поскольку библиотека curses нуждается в создании и удалении некоторых временных структур данных, все программы с использованием curses должны инициализировать библиотеку перед применением и затем разрешить ей восстановить первоначальные установки после ее применения. Делается это с помощью вызовов пары функций:

Упражнение 6.1. Программа с использованием curses, выводящая приветствие

В этом примере вы напишите очень простую использующую curses программу screen1.c, чтобы показать эти и другие базовые функции в действии. Далее будут описаны их прототипы.

Есть ли какая-либо альтернатива модулю curses для python для использования в windows? Я посмотрел в документации python, но там было упомянуто, что он предназначен для использования в unix. Я не очень хорошо знаком с ними, так что есть ли какой-то способ использовать модуль curses в windows или есть какой-то аналогичный модуль специально для windows? [Я использую Python 3.3]

Я рассматриваю возможность разработки консольного приложения в python, которое должно работать как под Windows, так и под Linux. Для этого мне бы очень хотелось использовать высокоуровневую консольную библиотеку типа curses. Однако, насколько мне известно, curses не доступен на Windows. Какие еще.

Я пишу интерфейс для серверного приложения с использованием модуля curses. THe main windows, возвращаемый curses, делится на 2 sub-windows. Верхняя половина экрана печатает выходные данные с сервера, в то время как нижняя строка принимает входные данные с window.getstr(). Иногда, когда я ввожу.

Я рад сообщить, что теперь здесь доступна сборка Windows из Curses в качестве расширения для Python на Windows . (Я его не писал, и я не знаю, кто его поддерживает.)

Вы можете запустить установщик и import curses , чтобы запустить curses. (Проверено на 64-bit Windows 7 и Windows 8.)

@ArtOfWarfare указывает на то, что вы можете установить это через Pip с помощью этой функции:

Первоначальный вопрос заключался в том, существует ли альтернатива curses на Windows.

Однако я обнаружил, что это слишком низкий уровень для моего недавнего проекта. Я также не был заинтересован в том, чтобы заставлять своих пользователей создавать/устанавливать PDcurses, и, кроме того, я также нахожу curses слишком низким уровнем для современного языка OO, такого как Python.

Поэтому я собрал кросс-платформенный API высокого уровня, чтобы сделать все, что большинство людей хотят от своего terminal/console. Пакет asciimatics обеспечит большую часть ваших потребностей в вводе и выводе. Если вы находитесь на Linux, это более человечный способ запрограммировать curses. Если вы находитесь на Windows, тот же класс работает, что и без внешних двоичных зависимостей. Ниже приведен пример скриншота:

Sample output

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

Тогда, боюсь, вам не повезло. Нет реальной кросс-платформенной версии или порта curses/ncurses,, есть порт "dialogue", который работает, но он ограничен в возможностях.

Ваш лучший выбор-запустить CygWin или MinGW32, оба, в "свободных терминах", эмулятор Linux system+terminal, в котором есть большая часть необходимых вам двоичных файлов. Они могут запускать собственные двоичные файлы Linux/Unix внутри terminal и получать доступ к вашим системным файлам "host" в любое время, так что это похоже на исправление Windows с помощью потрясающего terminal со всеми вашими вкусностями из мира Linux. Вам все равно понадобятся некоторые базовые знания о Linux и о том, как работают команды и т. Д., Но вы поймете это.

Screenshot of MinGW and CygWin

Вот пример Pyglet GUI:

Вот результат этого кода:

enter image description here

Я пробовал всевозможные проекты sourceforge, которые пытаются портировать функциональность GNU на Windows, с целью создать очень осведомленный профиль GNU Ipython, обеспечивающий лучшую среду terminal, которую я знаю (то есть на Windows). Насколько близок QtConsole к тому, чтобы иметь возможность.

У меня есть работающая установка Python 2.7/3.4 на моей машине Windows 7 (x64). Я хотел бы проверить curses на Windows. Curses установлен, но не работает: >>> import curses Traceback (most recent call last): File <stdin>, line 1, in <module> File.

Это не новое решение, а просто изменение предыдущего.

Вероятно, это следует добавить в PyPI, чтобы сделать установку с pip еще проще (чтобы ее можно было установить по имени, а не URL.)

Вы можете попробовать вот это. Однажды я сделал для этого Win64-порт (слился там). Однако вам нужно написать свой код Python немного по-другому. Этот вызов перенаправит все вызовы curses на собственную версию Python на UNIX, но вызовет PDCURSES.DLL на Windows (загрузите DLL отдельно). Насколько я помню, он поддерживает unicode:

Официальный документ предлагает следующее ( здесь , в нижней части абзаца):

Версия Windows Python не включает модуль curses. Доступна портированная версия под названием UniCurses . Вы также можете попробовать консольный модуль , написанный Фредриком Лундом, который не использует тот же API, что и curses, но обеспечивает адресуемый курсором вывод текста и полную поддержку ввода с помощью мыши и клавиатуры.

Похожие вопросы:

Похоже, что библиотека curses специфична для операционной системы. Учитывая это, я хотел бы знать: Может ли библиотека curses использоваться в нестандартной операционной системе (например, не в.

Я рассматриваю возможность разработки консольного приложения в python, которое должно работать как под Windows, так и под Linux. Для этого мне бы очень хотелось использовать высокоуровневую.

Я пишу интерфейс для серверного приложения с использованием модуля curses. THe main windows, возвращаемый curses, делится на 2 sub-windows. Верхняя половина экрана печатает выходные данные с.

Я пробовал всевозможные проекты sourceforge, которые пытаются портировать функциональность GNU на Windows, с целью создать очень осведомленный профиль GNU Ipython, обеспечивающий лучшую среду.

У меня есть работающая установка Python 2.7/3.4 на моей машине Windows 7 (x64). Я хотел бы проверить curses на Windows. Curses установлен, но не работает: >>> import curses Traceback (most.

Я хочу использовать старый пакет cellular automata под названием cage в своей установке windows7 anaconda. Проблема в том, что ИС использует модуль curses , для которого нет официальной установки. Я.

Я пытался использовать python -m pip install windows-curses и ошибка, которая появляется, такова: ERROR: Could not find a version that satisfies the requirement windows-curses (from versions: none).

Читайте также: