2012-07-01 9 views
6

Cuando uso el comando less en mi Terminal Mac, se muestra un segmento de 23 filas del archivo especificado. Si muevo hacia abajo el archivo, luego me desplazo hacia arriba en la ventana de la terminal, no veo ningún contenido de archivo antes del segmento actual. En cambio, veo los comandos que escribí antes de usar less.¿Cómo creo una interfaz ASCII con marco estático en Python?

Me gustaría utilizar este o un efecto similar para crear una interfaz del juego Ascii que muestre solo la pantalla actual, sin historial. Dibujaría mis cuadros en la pantalla y cambiaría solo el texto o las opciones dentro de esos marcos. Esto es muy común en sistemas antiguos que se ejecutan mayoritariamente o en su totalidad en un entorno de línea de comando.

¿Hay un módulo de Python que ofrezca esto? ¿Es un efecto que puedo o debo implementar yo mismo?

Aquí hay algunos elementos de pantalla de ejemplo que podrían beneficiarse de este efecto.

+-------------------------------------------------------------------+ 
|                 | 
| 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 | 
+--------------------+---------------+------------------------------+ 

Respuesta

6

Sugeriría buscar en el módulo curses. Es una interfaz para la biblioteca ncurses, que se utiliza para este propósito (creo que muchas aplicaciones de terminal están escritas en él). El documentation es bastante decente, y hay varios buenos tutorials que también deberían establecerlo en la dirección correcta.

(O ese uso o liberal de \r.) Sugeriría encarecidamente el módulo curses, ya que debería proporcionar más flexibilidad para lo que está buscando hacer.

EDITAR: Si está interesado en crear una aplicación multiplataforma, tenga en cuenta que el módulo curses solo está disponible en sistemas * nix. Según la documentación:

Nadie ha creado un puerto de Windows del módulo de curses.

ese tutorial recomienda this library para su uso en Windows, aunque si las fechas en la página de descarga son una indicación, no ha sido actualizado en una buena cantidad de tiempo. Puede mirar en this module, que se ve considerablemente más reciente.

+0

Esto es genial! Afortunadamente, estoy en una comunidad Unix/Linux, así que me puedo enfocar en eso. Voy a marcar el módulo 'console' para más tarde. –

+0

Esta publicación es bastante antigua y la página de maldiciones ahora indica que existe un puerto de Windows en [esta página] (https://pypi.python.org/pypi/UniCurses). – KGVT

3

De lo que estás hablando es curses. Es un módulo de Python que interactúa con ncurses. El mejor tutorial que he encontrado para usar curses es este: http://www.dev-explorer.com/articles/python-with-curses

Algunos programas populares que usan maldiciones (aunque de otro idioma) son aptitude y nano.

+0

aptitude y nano use curses. vim usa termcap (no maldiciones). wget y las tintas están codificadas (sin maldiciones). –

+0

@ThomasDickey ¡Es bueno saberlo, actualizado! – C0deH4cker

1

He estado luchando con este problema también. Quería una solución simple multiplataforma, por lo que extendí asciimatics para proporcionar un conjunto de widgets para crear interfaces de usuario basadas en formularios como esta. Por ejemplo:

Text UI widgets

El código resultante debe ser muy concisa y trabajar en cualquier sistema operativo moderno (incluyendo Windows, Linux y OSX) sin necesidad de instalar bibliotecas nativas adicionales. Como puede ver en el contact list sample, los widgets estándar son fáciles de diseñar y deben satisfacer la mayoría de sus necesidades.

-1

Si está buscando hacer un juego de Ascii, probablemente la Ascimática no vaya a funcionar, ya que se trata principalmente de cosas como formas. Usar maldiciones definitivamente es el camino a seguir.Aunque no hay un puerto oficial de maldiciones para Windows, hay uno bueno no oficial al https://www.lfd.uci.edu/%7Egohlke/pythonlibs/#curses, así que asegúrese de verificarlo.

+0

¿Has leído los documentos para asciomáticos? La API de bajo nivel hace todas las maldiciones que te da y se ejecuta en Windows directamente. –

Cuestiones relacionadas