Python curses.newwin nicht funktioniert
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)
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 ...?