Wie kann man in Python eine Zeile unten "fixieren"?

2 Antworten

Wenn Dein Terminal Steuercodes versteht (und das soltle bei allen VTE und der VC soweit der Fall sein), dann kannst Du das mit Steuersequenzen realisieren, ohne gleich Curses zu bemühen.

Wenn du die Zusicherung willst, dass es auf möglichst vielen Terminaltyypen funktioniert und die Steuercodes ggf. entsprechend angepasst werden, würdest Du definitiv auf (n)curses zurückgreifen.

Du hast bei den Steuersequenzen die Möglichkeit absolut zu positionieren, relativ zu bewegen, eine Position zu merken und zu dieser zurückzugehen.

Was am sinnvollsten ist, hängt von den Anwendungsfällen ab.

def progressbar(percent,src):
        bar=' ' * (20*percent/100)
        space=' ' * (20-len(bar))
        sys.stdout.write("\033[s\033[?25l%s [\033[7m%s\033[0m%s] [%2s%%]\033[u" % (src,bar,space,percent))

Achtung, das ist Legacy, (uralt) anstatt % würde man heute eher zu nem f-String greifen, am eigentlichen Konzept ändert das aber nichts.

\033[s

Das bedeutet zum Beispiel aktuelle Cursorposition merken.

Die Bar ist also realisiert dadurch, daß die Cursorposition gespeichert wird, die Bar ausgegeben wird und danach die Cursorposition wieder hergestellt wird, man also wieder am Startpuntk der Barausgabe landet.

Willst Du zwischenzeitlich an anderen Stellen etwas ändern, wird es komplizierter.

Je nachdem was Du alles machen willst, kann es sinnvoll sein die Größe des Terminals zu ermitteln, das bedeutet aber etwas mehr Aufwand.

Das Terminal lässt sich mit ANSI Escape Codes steuern, unabhängig von der Sprache. Weil das aber schnell mühsam wird, gibt es bequeme Bibliotheken wie zB https://github.com/Textualize/rich


Robin808 
Beitragsersteller
 02.10.2024, 17:53

Ich habe es jetzt mit rich probiert und KI gefragt... Ne, ich finde es einfach nicht heraus. Ich brauche ein kleines Code-Beispiel, bitte.
Aber trotzdem danke

Robin808 
Beitragsersteller
 02.10.2024, 18:02
@Robin808

Ne, sorry, hat funktioniert. Dankeschön!