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 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(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

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...