python curses.newwin non funziona
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)
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 ...?