Domanda

Sto imparando maledizioni per la prima volta, e ho deciso di farlo in python perché sarebbe più facile che costantemente ricompilazione. Tuttavia, ho colpito un intoppo. Quando cerco di aggiornare una finestra seccond, ottengo alcun output. Ecco un frammento di codice:


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 finestra vittoria normale inizializzato con initscr () funziona, ma la finestra campo non compare. Qualsiasi aiuto?

Edit: Ecco il nuovo, codice rivisto, che non fa ancora lavoro

.
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)
È stato utile?

Soluzione 2

Ah, trovato il problema. Quando uso stdscr.clear (), è cancellare l'intero terminale, tra cui la nuova finestra. Tutto quello che dovevo fare è fare due finestre, una per ogni display separato.

Oh, e grazie a sopra per la punta curses.wrapper. Dicendo qui perché non posso pubblicare un commento.

Altri suggerimenti

sembra ok per me - io uso sempre curses.wrapper e il mio terminale non supporta la visibilità del cursore di 0, quindi questo è quello che ho ...:

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)

vedo l'invertito "Ciao, mondo!", Poi quando ho colpito un tasto qualsiasi per soddisfare il getch i termina di programma con il got error (curs_set() returned ERR) msg previsto.

Che vedi w / questo programma ...? (Ricordate l'involucro fa initscr e imposta noecho e cbreak - e ancora più importante lo ripristina quando fatto, che è per questo che sempre lo uso; -).

A proposito, sto usando Py 2.6.4 su un Mac (OSX 10.5.8) e Terminal.App. La vostra piattaforma ...?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top