Seite 1 von 1
windows konsole
Verfasst: Samstag 8. April 2006, 20:41
von Korsakov
hi
ich möchte meinen konsolen anwendungen (mit py2exe erstellt) farbe verpassen wie etwa hier zu begutachten:
im forum gibts dazu schon einen thread (
http://www.python-forum.de/viewtopic.ph ... in+console) der sehr hilfreich ist, allerdings nicht ganz. habe die verschiedenen möglichkeiten angeschaut und ein problem fiel mir spontan, wenn ich meinen output so stylen möchte wie oben auf dem screenshot: diese python module ändern die gesamte output farbe bis man sie wieder änder. das wäre nach paar texten schon langer code leider.
gibt es den ne möglichkeit das ganze elganter zu gestallten, damit der output allein nicht schon so ne "rechenarbeit" für die cpu wird?
MfG
Korsakov
edit (jens): Bild eingeblentet
Verfasst: Samstag 8. April 2006, 23:27
von modelnine
Nein. Du mußt jedes mal angeben wie die neue Farbe aussehen will. Im Endeffekt wirds darauf hinauslaufen dass Du eine ANSI-Escape-Sequenz schickst um etwas farbig zu machen, und nachdem Du den String ausgegeben hast der farbig sein soll, wieder eine Sequenz schickst, um die Farbe wieder auf den Standard zurückzustellen. Das ganze kannst Du natürlich in eine Funktion verpacken, die die Start-/End-Sequenz automatisch erstellt, und Dir dadurch Code beim Ausgeben sparen, aber nichtsdestotrotz kannst Du anders keine Farben in einer Konsole bauen.
Verfasst: Samstag 8. April 2006, 23:40
von Korsakov
achso, wie wirkt sich das auf die geschwindigtkeit von meinen anwendungen aus, habe sehr viel text auszugeben?
Verfasst: Samstag 8. April 2006, 23:52
von modelnine
Ist vernachlässigbar, würd ich erst mal schätzen.
Hier gilt natürlich wie immer: testen, und
nur dann optimieren wenn's wirklich zu langsam ist, nicht im Vorfeld sinnlos probieren Optimierungen einfließen zu lassen die alles nur komplizierter machen als es sein müßte.

Verfasst: Samstag 8. April 2006, 23:59
von Korsakov
okay
was mich noch interessieren würde, wie genau man "frames" (zumindest sieht es so aus) in der konsole macht. z.b. wenn ich:
steht bei mir immer unten in der konsole: -Fortsetzen-
bis der text fertig ist. genau das gleiche würde ich gern mit eigenen text machen, allerdings fällt mir nix ein das mit WConio hinzukriegen (ansatzweise ja, aber nicht wie ich das wirklich realisieren kann).
MfG
Korsakov
Verfasst: Sonntag 9. April 2006, 00:02
von modelnine
Ganz einfach.
Immer nur x Zeilen ausgeben (wobei x = Konsolenhöhe-1, 24 ist ein guter Richtwert), dann -Fortsetzen- auf eine eigene Zeile ausgeben, und dann wenn eine Taste gedrückt wurde "\r" gefolgt durch die neuen Daten (auch wieder nur x Zeilen maximal) ausgeben. Braucht man nicht mal irgendwelche ANSI-Escape-Sequenzen für.
Verfasst: Sonntag 9. April 2006, 00:07
von Korsakov
super, vielen dank für die schnelle hilfe, dann mache ich mich mal ans werk. danke nochmals

Verfasst: Sonntag 9. April 2006, 07:20
von Korsakov
irgendwie komme ich nicht ganz klar das ganze elegant in code umzusetzen:
Code: Alles auswählen
import WConio
print WConio.textcolor(14), 'test string', WConio.textcolor(15)
das returnt mir immer ein "None" bei den beiden funktionen :-/
Verfasst: Sonntag 9. April 2006, 09:07
von helmut
Hallo,
der
Rueckgabewert der Funktion
textcolor() ist
None, und der wird auch korrekterweise angezeigt. Mit einer kleinen Aenderung sollte es aber klappen:
Code: Alles auswählen
import WConio
WConio.textcolor(14)
print 'test string'
WConio.textcolor(15)
print "normal"
Gruss, Helmut
Verfasst: Sonntag 9. April 2006, 10:34
von Korsakov
genau so möchte ich es nicht, habe leider viel viel text auszugeben und veränder oft die farben.
Verfasst: Sonntag 9. April 2006, 10:37
von modelnine
Deswegen sag ich doch, mach 'ne Funktion draus, die dann in einer Zeile das für Dich erledigt was Du mittels WConio in drei Zeilen machen müsstest:
Code: Alles auswählen
import sys
def printcolor(color,data):
WConio.textcolor(color)
sys.stdout.write(data)
WConio.textcolor(15)
printcolor(14,"hallo, wie gehts? ")
printcolor(12,"mir geht's heute gut.")