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)
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top