Erfrischend

Damit Veränderungen im virtuellen Fenster auf dem Bildschirm erscheinen, gilt es, diesen zu aktualisieren. Dazu dient der Aufruf in Zeile 30, der zu Beginn jedes Schleifendurchlaufs stattfindet (Zeile 28 bis 49).

Die Zeilen 31 bis 39 erstellen ein Unterfenster, das ebenfalls eine Überschrift bekommt (Zeilen 34 und 35). Der Text der Überschrift ist diesmal mittig ausgerichtet und erscheint in den Farben schwarz auf gelb (Farbkombination 5). Zeile 37 sorgt dafür, dass der Text im Unterfenster erscheint, die Farbe wechselt dabei in Abhängigkeit des Schleifendurchlaufs. Die Zeilen 38 und 39 aktualisieren den Text im Unterfenster.

Die Zeilen 42 bis 44 erzeugen eine Statuszeile, die die Nummer des aktuellen Schleifendurchlauf darstellt. Der Text steht hier wieder linksbündig und erscheint als weiße Schrift auf blauem Grund (Farbkombination 2).

Ab Zeile 47 wartet die Applikation auf einen Tastendruck vom Benutzer. Hat das Programm die maximale Anzahl Schleifendurchläufe erreicht, so endet die Schleife, und es durchläuft den Code ab Zeile 50. Dieser veranlasst das Löschen des Bildschirminhaltes und nachfolgend das Aktualisieren des Fensters (Zeile 51). Ab Zeile 53 beendet sich das Skript wie oben beschrieben.

Für die Programmiersprache C ist das recht schick in einem Wikibook [10] zusammengestellt. Zum Einstieg ist das vielleicht zu komplex, aber als Referenz zum Nachschlagen durchaus gut geeignet.

In Netz findet sich ein Tutorial [11] für das Curses-Modul. Weitere Informationen zu allen Funktionen finden sich in der ausführlichen Python-Dokumentation [12]. Eine Zeitlang existierte ein Paket curses-extra vom Entwickler Riccardo Galli, welches bereits vordefinierte Fenster zur Eingabe und Auswahl sowie Knöpfe und Scrollbalken bot. Derzeit existiert aber kein aktuelles Paket dafür.

Urwid

Wer vorgefertigte Elemente sucht, dem empfiehlt sich ein Blick auf Urwid. Das recht aktive Projekt genießt noch nicht den Bekanntheitsgrad wie curses oder dialog. Es ermöglicht aber, mit wenig Programmcode zu sehr brauchbaren Ergebnissen zu kommen. Es bringt keine fertigen Dialogboxen mit, aber eine eine Reihe intelligent programmierter Text- und Füllobjekte.

Um das Sichern oder Wiederherstellen des Bildschirminhalts brauchen Sie sich nicht zu kümmern. Wichtig ist die Funktion urwid.MainLoop(), die eine Hauptschleife im Programm erzeugt und auf die Tastendrücke des Benutzers reagiert. Mit dem Aufruf loop.run() aktivieren Sie diese Schleife. Rufen Sie die ohne Parameter auf, gelingt das Abbrechen der Schleife nur mit [Strg]+[C].

Text, den Sie ausgeben möchten, binden Sie zunächst an ein Textobjekt der Klasse urwid.Text(). Um daraus eine Box zu erzeugen, packen Sie dieses Objekt in ein Füllobjekt (urwid.Filler()).

Listing 3

# -*- coding: utf-8 -*-
import urwid
def show_or_exit(input):
  # Eingabe prüfen
  if input in ('q', 'Q', 'esc'):
      raise urwid.ExitMainLoop()
   # Tastendruck darstellen
   txt.set_text('Taste ' + repr(input))
# Textobjekt erzeugen und im Textfeld oben anordnen
txt = urwid.Text(" Hello World! ")
fill = urwid.Filler(txt, 'top')
# Hauptschleife festlegen und aufrufen
loop = urwid.MainLoop(fill, unhandled_input=show_or_exit)
loop.run()

Das kleine Hallo-Welt-Programm (Listing 3) beinhaltet die beiden Elemente. Es erzeugt zunächst ein Textobjekt (Zeile 14), welches einer Box in der obersten Zeile erscheint (Zeile 15). Da für die Box keine Größenangaben vorliegen, nimmt sie den gesamten Inhalt des Terminals ein.

Die Zeilen 18 und 19 erzeugen die Hauptschleife loop, und mit loop.run() startet diese. Der erste Parameter bindet die Hauptschleife an das Textfeld. Der zweite Parameter legt fest, welche Funktion einen Tastendruck behandelt. Hier ist es die lokale Funktion show_or_exit(), welche in Zeilen 5 bis 11 definiert ist.

De Funktion show_or_exit() prüft zunächst, ob die Eingabe [Q],[Umschalt]+[Q] oder [Esc] entspricht. Trifft das zu, beendet sich das Skript mit Hilfe von urwid.ExitMainLoop(). Für alle anderen Tastendrücke füllt das Programm das Textfeld mit dem Wert der gedrückten Taste und aktualisiert den Bildschirm.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Huawei
Pit Hampelmann, 13.12.2017 11:35, 2 Antworten
Welches Smartphone ist für euch momentan das beste? Sehe ja die Huawei gerade ganz weit vorne. Bi...
Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 2 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...