LVGL 03 Screen

Aus Micropython
Zur Navigation springen Zur Suche springen
LVGL 9 mit MicroPython
Kapitel 2
Titel Der Screen
Voraussetzungen Grundkenntnisse in MicroPython
Getestet mit LVGL 9.x
Schwierigkeitsgrad ★☆☆☆☆
Benötigte Zeit 15 Minuten
Status vorerst Fertig


Kapitel 3 – Der Screen[Bearbeiten | Quelltext bearbeiten]

Lernziel[Bearbeiten | Quelltext bearbeiten]

Nach diesem Kapitel weißt du,

  • was ein Screen ist,
  • warum jeder Screen ein eigenes Objekt ist,
  • wie ein Screen erzeugt wird,
  • wie zwischen Screens gewechselt wird.

Was ist ein Screen?[Bearbeiten | Quelltext bearbeiten]

Ein Screen ist die oberste Ebene einer grafischen Benutzeroberfläche.

Jedes sichtbare Widget befindet sich auf genau einem Screen.

Ein Screen besitzt keinen Parent und bildet somit die Wurzel des Objektbaums.


Screen
│
├── Label
├── Button
├── Slider
└── Image

Ein Programm kann mehrere Screens besitzen.

Es ist jedoch immer nur ein Screen gleichzeitig sichtbar.

Einen Screen erzeugen[Bearbeiten | Quelltext bearbeiten]

Zuerst ein LVGL-Objekt erzeugen:

scr = lv.obj()

Dem Screen eine Hintergrundfarbe zuweisen:

scr.set_style_bg_color(lv.color_hex(0xff0000), lv.PART.MAIN)

Den Screen anzeigen:

lv.screen_load(scr)

Hinweis

lv.color_hex(0xff0000)
gibt eine Farbe an. Hier in Hex-Darstellung.
lv.PART.MAIN
bezeichnet den Teil (Part) eines LVGL-Objekts, auf den ein Style angewendet wird.

Mehr dazu im Kapitel 7 - Farben und Schriftarten.

Der aktuelle Screen[Bearbeiten | Quelltext bearbeiten]

Mit

scr = lv.screen_active()

liefert LVGL den momentan sichtbaren Screen.

Dieser Screen existiert bereits.

Es wird kein neuer Screen erzeugt.

Hinweis

In kleinen Programmen genügt meist der aktuelle Screen.

Mehrere Screens werden erst bei umfangreicheren Anwendungen benötigt, beispielsweise für Menüs oder Einstellungsseiten.

Der "Magic - Screen"[Bearbeiten | Quelltext bearbeiten]

LVGL erzeugt beim Starten gleich einen Screen. Damit man ihn benutzen kann muß er einen Namen bekommen. Das geschieht mit:

scr = lv.screen_active()

Der erste Screen ist also ganz schnell einsatzbereit. Man kann sich so etwas Arbeit sparen.

Hintergrund[Bearbeiten | Quelltext bearbeiten]

Vielleicht fragst du dich, warum die Funktion

lv.screen_active()

heißt und nicht beispielsweise

lv.get_screen()

Der Grund liegt in der internen Arbeitsweise von LVGL.

LVGL kann mehrere Screens gleichzeitig verwalten.

  • den aktuell sichtbaren Screen,
  • einen Screen, der gerade eingeblendet wird,
  • einen Screen, der gerade ausgeblendet wird.

Während einer animierten Bildschirmumschaltung können deshalb mehrere Screens gleichzeitig im Speicher vorhanden sein.

Die Funktion

lv.screen_active()

liefert immer den Screen zurück, der momentan als aktiv gilt.

Der Name beschreibt also nicht das Abrufen eines beliebigen Screens, sondern den aktuellen Zustand der grafischen Oberfläche.

Diese Namensgebung findet sich an vielen Stellen in LVGL wieder und macht den Quellcode leichter verständlich.

Wichtig[Bearbeiten | Quelltext bearbeiten]

Ein Screen ist kein Fenster.

Auf einem Mikrocontroller gibt es normalerweise keinen Desktop.

Es existiert immer genau ein aktiver Screen.

Merke

Ein Screen bildet die Wurzel des Objektbaums.
Alle sichtbaren Widgets gehören letztlich zu einem Screen.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Erzeuge zwei bis drei Screens.
  • Wechsle anschließend mehrfach zwischen den Screens.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Diese Beispieldateien können mit "unter Ziel speichern" herunter geladen werden.
Darauf klicken zeigt sie an.

Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

  • Ein Screen ist ebenfalls ein LVGL-Objekt.
  • Jeder Screen besitzt keinen Parent.
  • Es kann viele Screens geben.
  • Sichtbar ist immer nur ein Screen.