python curses.newwin ne fonctionne pas
Question
Je suis malédictions d'apprentissage pour la première fois, et j'ai décidé de le faire en python, car il serait plus facile que de constamment recompiler. Cependant, je l'ai frappé un accroc. Lorsque je tente de mettre à jour une fenêtre seccond, je reçois pas de sortie. Voici un extrait de code:
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 fenêtre de victoire normale initialisé avec initscr () fonctionne, mais la fenêtre de champ ne se présente pas. Toute aide?
Edit: Voici le nouveau code révisé qui ne fonctionne toujours pas
.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)
La solution 2
Ah, a trouvé le problème. Quand j'utilise stdscr.clear (), il est Dégagement de la totalité du terminal, y compris la nouvelle fenêtre. Tout ce que je devais faire est de faire deux fenêtres, une pour chaque affichage séparé.
Oh, et grâce à au-dessus de la pointe du curses.wrapper. Dire ici parce que je ne peux pas poster un commentaire.
Autres conseils
Il semble OK pour moi - je l'utilise toujours curses.wrapper
et mon terminal ne supporte pas la visibilité du curseur de 0, donc ce que j'ai ...:
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)
Je vois l'inverse « Bonjour, monde! », Puis quand je frappe une touche pour satisfaire la getch
du programme les termine avec le got error (curs_set() returned ERR)
msg attendu.
Que voyez-vous w / ce programme ...? (Rappelez-vous l'emballage fait initscr
et ensembles noecho
et cbreak
- et plus important encore, il remet à zéro lorsque vous avez terminé, ce qui est pourquoi je l'utilise toujours, -).
BTW, j'utilise Py 2.6.4 sur un Mac (10.5.8 OSx) et Terminal.App. Votre plate-forme ...?