2011-08-15 8 views
10

El siguiente programa genera un error:último carácter de una ventana en Python + maldice

import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    top.addstr(0, 9, "X") 

curses.wrapper(test) 

Parece que cada vez que intento utilizar ADDSTR() para escribir un carácter en la última columna de la última línea de una ventana (incluso cuando es más pequeña que la pantalla), genera un error. No quiero desplazarme, no me importa la posición del cursor. Todo lo que quiero es poder escribir caracteres en cada posición de la ventana. ¿Es posible? ¿Cómo puedo hacer esto?

+0

Relacionados: http://stackoverflow.com/questions/10877469 – augurar

Respuesta

9

Parece que simplemente escribir el último carácter de una ventana es imposible con maldiciones, por razones históricas.

La única solución que pude encontrar consiste en escribir el carácter en un lugar a la izquierda de su destino final y presionarlo con una inserción. El siguiente código empujará la "X" a la posición 9:

top = curses.newwin(1, 10, 0, 0) 
top.addstr(0, 8, "X") 
top.insstr(0, 8, " ") 
6

Resulta que en realidad curseshace terminan escribiendo a la última posición: sólo se genera un error justo después.

lo tanto, si se puede vivir con este truco/inelegance:

#! /usr/bin/env python 
import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    try: 
     top.addstr(0, 9, "X") 
    except curses.error: 
     pass 

curses.wrapper(test) 

es decir, atrapando e ignorando el error, el código será mucho más simple tanto en el diseño e implementación.

+0

Me gusta ese enfoque. No está realmente limpio, pero así es como lo manejé: estoy envolviendo las ventanas (cuya clase no está clara) dentro de una clase 'BaseWindow', donde defino todos mis métodos. Esa clase resuelve los nombres de los métodos de ventana, como 'addstr' mediante la implementación de' __getattr__', que a su vez devolverá el atributo de la ventana real. Adapte ese enfoque al método 'addstr': mi' BaseWindow' ahora define su propio método 'addstr', que intenta y llama al método' addstr' de la ventana real, y pasa silenciosamente cualquier excepción 'curses.error'. –

Cuestiones relacionadas