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)
¿Fue útil?

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 ...?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top