curses: newwin() und letzte Zeile
Verfasst: Freitag 4. März 2022, 18:42
Moinsens!
Ist das hier der passende Bereich für curses-Fragen? Ein paar vereinzelte hatte ich hier gesehen. Wenn nicht, bitte kurzen Hinweis...
Ich versuche gerade, nach etlichen Jahren, mich mal wieder etwas mit curses zu beschäftigen. Nun wollte ich neben dem gesamten Bildschirm auch mal einzelne Bereiche mittels newwin() benutzen. Aber das haut irgendwie gar nicht so recht hin. Bislang habe ich 2 grundlegende Probleme:
( die loop() wird von main() aufgerufen und ruft seinerseits die lifetime(screen) über wrapper(lifetime) auf. )
a) Mein screen ist 32x96 Zeichen (Putty Terminal). Aber wenn ich einen Rahmen zeichnen möchte, dann krieg ich eine Fehlermeldung von addstr(), wenn ich in 31,0 schreiben möchte. Wenn ich den unteren Rand des Rahmens in 30,0 schreibe, funktioniert es, aber es bleibt eben eine freie Zeile am unteren Bildschirmrand. Von "damals" erinnere ich mich, dass ich Probleme mit dem einen Zeichen ganz rechts unten hatte, was sich auch irgendwie lösen liess. Aber dass ich die ganze Zeile nicht benutzen kann...?
b) Neben dem Problem der letzten Zeile, dass es auch in einem Window zu geben scheint, habe ich noch das Problem, dass die addstr() zwar ausgeführt, das Ergebnis aber nicht angezeigt wird. Und dabei ist's auch egal, ob ich win.refresh() oder screen.refresh() aufrufe.
Konkret versuche ich, einen "Button" darzustellen, der dann auch später vom Touch-Display gedrückt werden kann. Der obere (z.Z. aktive) Teil der Routine bewirkt nichts, keine Ausgabe der Zeichen auf dem Bildschirm. Der untere Teil, der direkt auf dem screen und nicht auf dem window schreibt, funktioniert hingegen.
Was übersehe ich da jetzt?
Michael
Ist das hier der passende Bereich für curses-Fragen? Ein paar vereinzelte hatte ich hier gesehen. Wenn nicht, bitte kurzen Hinweis...
Ich versuche gerade, nach etlichen Jahren, mich mal wieder etwas mit curses zu beschäftigen. Nun wollte ich neben dem gesamten Bildschirm auch mal einzelne Bereiche mittels newwin() benutzen. Aber das haut irgendwie gar nicht so recht hin. Bislang habe ich 2 grundlegende Probleme:
( die loop() wird von main() aufgerufen und ruft seinerseits die lifetime(screen) über wrapper(lifetime) auf. )
a) Mein screen ist 32x96 Zeichen (Putty Terminal). Aber wenn ich einen Rahmen zeichnen möchte, dann krieg ich eine Fehlermeldung von addstr(), wenn ich in 31,0 schreiben möchte. Wenn ich den unteren Rand des Rahmens in 30,0 schreibe, funktioniert es, aber es bleibt eben eine freie Zeile am unteren Bildschirmrand. Von "damals" erinnere ich mich, dass ich Probleme mit dem einen Zeichen ganz rechts unten hatte, was sich auch irgendwie lösen liess. Aber dass ich die ganze Zeile nicht benutzen kann...?
b) Neben dem Problem der letzten Zeile, dass es auch in einem Window zu geben scheint, habe ich noch das Problem, dass die addstr() zwar ausgeführt, das Ergebnis aber nicht angezeigt wird. Und dabei ist's auch egal, ob ich win.refresh() oder screen.refresh() aufrufe.
Konkret versuche ich, einen "Button" darzustellen, der dann auch später vom Touch-Display gedrückt werden kann. Der obere (z.Z. aktive) Teil der Routine bewirkt nichts, keine Ausgabe der Zeichen auf dem Bildschirm. Der untere Teil, der direkt auf dem screen und nicht auf dem window schreibt, funktioniert hingegen.
Code: Alles auswählen
def newButton( y, x, h, w, t ):
btn = curses.newwin( h + 1, w, y, x )
frameBorder( btn, 0, 0, h, w, False )
for i in range( 1, h - 1 ):
for j in range( 1, w - 1 ):
btn.addch( i, j, chr( 0x253c ))
btn.addstr( 2, 4, t )
btn.refresh()
#frameBorder( screen, y, x, h, w, False )
#for i in range( 1, h - 1 ):
# for j in range( 1, w - 1 ):
# screen.addch( y + i, x + j, chr( 0x253c ))
#screen.addstr( y + 2, x + 4, t )
return btn
Code: Alles auswählen
╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ┌──────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ │ │ ║
║ └──────────────────────────────────────────────────────────┘ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║╔══════════════════╗ ╔══════════════════╗║
║║┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼║ ║┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼║║
║║┼┼┼Previous┼┼┼┼┼┼┼║ ║┼┼┼Next┼┼┼┼┼┼┼┼┼┼┼║║
║║┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼║ ║┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼║║
║╚══════════════════╝ ╚══════════════════╝║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝
Michael