pitón curses.newwin no funciona
Pregunta
Estoy aprendiendo maldiciones por primera vez, y decidí hacerlo en Python, ya que sería más fácil que constantemente volver a compilar. Sin embargo, me he pegado un tirón. Cuando intento actualizar una ventana seccond, no consigo ninguna salida. He aquí un fragmento de código:
import curses
win = curses.initscr()
curses.noecho()
curses.cbreak()
curses.curs_set(0)
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
La ventana victoria normales inicializado con initscr () funciona, pero la ventana de campo no aparece. Cualquier ayuda?
Edit: Aquí está el nuevo código, revisada, que aún no funciona
.import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(25, 25, 6, 6)
field.border()
cont = True
x, y = 0, 0
while cont:
stdscr.clear()
field.clear()
coords = "%d, %d" % (x, y)
stdscr.addstr(5, 5, coords, curses.A_REVERSE)
field.addstr(y+2, x+2, "@", curses.A_BOLD)
chr = stdscr.getkey()
if chr == 'h':
if x > 0: x -= 1
if chr == 'l':
if x < 20: x += 1
if chr == 'j':
if y > 0: y -= 1
if chr == 'k':
if y < 20: y += 1
if chr == 'q':
cont = False
stdscr.clear()
field.clear()
stdscr.noutrefresh()
field.noutrefresh()
curses.doupdate()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
Solución 2
Ah, encontró el problema. Cuando utilizo stdscr.clear (), es despejar todo el terminal, incluyendo la nueva ventana. Todo lo que tenía que hacer es hacer dos ventanas, una para cada pantalla por separado.
Ah, y gracias a la punta de arriba para curses.wrapper. Diciendo aquí porque no puedo escribir un comentario.
Otros consejos
Parece bien para mí - Yo siempre uso curses.wrapper
y mi terminal no soporta la visibilidad del cursor de 0, así que esto es lo que tengo ...:
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
field.getch()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
Veo el invertido "Hola, mundo!", Entonces cuando pulso cualquier tecla para satisfacer la getch
el programa termina con el got error (curs_set() returned ERR)
msg esperado.
¿Qué estás viendo w / este programa ...? (Recuerde que la envoltura hace initscr
y conjuntos noecho
y cbreak
- y lo más importante lo restablece cuando se hace, por lo que siempre lo uso; -).
Por cierto, estoy usando Py 2.6.4 en un Mac (OSx 10.5.8) y Terminal.App. Su plataforma de ...?