Frage

Ich bin Flüche zum ersten Mal lernen, und ich beschloss, es in Python zu tun, weil es einfacher wäre, als ständig neu zu kompilieren. Allerdings habe ich einen Haken getroffen. Wenn ich versuche, ein seccond Fenster zu aktualisieren, bekomme ich keine Ausgabe. Hier ist ein Code-Snippet:


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()

Die normale Gewinn Fenster mit initscr initialisiert () funktionieren, aber das Feld Fenster nicht zu sehen. Jede Hilfe?

Edit: Hier ist der neue, überarbeitete Code, der immer noch nicht funktioniert

.
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)
War es hilfreich?

Lösung 2

Ah, fand das Problem. Wenn ich stdscr.clear () verwenden, ist es das gesamte Terminal löschen, das neue Fenster inklusive. Alles, was ich brauchen, ist machen zwei Fenster zu tun, eine für jede separate Anzeige.

Oh, und dank oben für curses.wrapper Spitze. Zu sagen, hier, weil ich keinen Kommentar veröffentlichen kann.

Andere Tipps

Es scheint OK zu mir - ich verwende curses.wrapper und mein Terminal nicht immer Cursor Sichtbarkeit von 0 unterstützen, so ist dies, was ich habe ...:

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)

Ich sehe das umgekehrt: „Hallo, Welt!“, Dann, wenn ich eine Taste drücken Sie die getch das Programm endet mit dem erwarteten msg got error (curs_set() returned ERR) gerecht zu werden.

Was sehen Sie w / dieses Programm ...? (Denken Sie daran, die Verpackung macht initscr und setzt noecho und cbreak - und was noch wichtiger setzt es, wenn Sie fertig, weshalb ich es immer verwenden; -).

BTW, ich bin mit Py 2.6.4 auf einem Mac (OSx 10.5.8) und Terminal.App. Ihre Plattform ...?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top