[Python-de] Re: Freie Ausgabe auf Zeilen des Displays

Marco Bartel Marco.Bartel at iee.lu
Die Apr 27 08:27:35 CEST 2004


Thorsten Kampe wrote:

>* Thorsten Kampe (2004-04-26 15:21 +0100)
>  
>
>>Vielleicht war meine "Zeichnung" mißverständlich, also noch ein
>>Versuch...:
>>
>>    
>>
>>>>>foobar('A-Z', 'auf fuenf Zeilen')
>>>>>          
>>>>>
>>A
>>B
>>C
>>D
>>E
>><nun wird die erste Zeile überschrieben>
>>    
>>
>>>>>foobar('A-Z', 'auf fuenf Zeilen')
>>>>>          
>>>>>
>>F
>>B
>>C
>>D
>>E
>><undsoweiter>
>>    
>>
>>>>>foobar('A-Z', 'auf fuenf Zeilen')
>>>>>          
>>>>>
>>F
>>G
>>H
>>I
>>E
>><schlußendlich>
>>    
>>
>>>>>foobar('A-Z', 'auf fuenf Zeilen')
>>>>>          
>>>>>
>>V
>>W
>>X
>>Y
>>Z
>>
>>Das Problem ist nicht der "Modulo-Algorithmus", sondern das
>>"überschreiben" der ersten Zeile...
>>    
>>
>
>Hm, einige haben das curses-Modul vorgeschlagen, das erscheint mir
>aber zu komplex für diese simple Aufgabe. "ansi.py" (welches auch
>vorgeschlagen wurde) unterstützt nicht nur farbige Ausgabe sondern
>auch Cursor-Bewegungen (move, moveUp, moveForward, clear, save, etc.)
>
>Folgendes Beispielprogramm[1] klappt auch, nur leider ist die Ausgabe
>suboptimal, das heißt die Ausgabe fängt immer vier Zeilen (statt
>einer) unter dem Prompt an.
>
>Außerdem werden Zeilen "übersprungen", wenn der Prompt am "Boden" des
>Terminalfensters ist.
>
>Wenn ich's mit clear(), move(0, 0) oder moveUp(n) wird entweder eine
>Zeile zweimal überschrieben oder es passiert nichts.
>
>Ist ansi.py (das einfache ANSI Escape-Sequenzen verwendet) buggy oder
>mein simpler Code?
>
>
>Thorsten
>
>[1] Aufruf: testfunc(); benötigt ansi.py von
>http://www.demonseed.net/~jp/code/ansi.py
>
>"periodic" sorgt für die "Periode" (65(A) -> 1; 66(B) -> 2, 74(J) ->
>10 ... Z(90) -> 6)
>
>from ansi import *
>from time import sleep
>
>def testfunc():
>   save()
>   for ord_char in range(ord('A'), ord('Z') + 1):
>        moveDown(periodic(ord_char, ord('A'), 1, 10))
>        print chr(ord_char)
>        sleep(1)
>        restore()
>
>def periodic(counter, counter_at_sop, sop, eop):
>    """ wrap counter in range(sop, eop + 1) 
>    sop = start of period; eop = end of period """
>    return (counter - counter_at_sop) % (eop - sop + 1) + sop
>
>
>_______________________________________________
>python-de maillist  -  python-de at python.net
>http://python.net/mailman/listinfo/python-de
>
>  
>
Hallo Thorsten,
das Problem mit ansi.py ist, dass die Befehle für move usw... jeweils 
ein print aufrufen. Das Probloem dabei ist, dass nach dem print befehl 
der Cursor  in die nächste Zeile hüpft. Ich bin hingegangen, und habe 
mir nur die Escape-Sequenzen aus der ansi.py genommen, und meine Ausgabe 
in einem Print Statement zusammengefasst, und siehe da, es funzt. Ich 
persönlich nutze lieber curses, und hab mir ne eigene kleine Lib mit 
Befehlen wie cls() say(x,y,text) setcolor(fg,bg) usw... geschrieben.

CU
Marco