LVGL 04 Widgets
| LVGL 9 mit MicroPython | |
|---|---|
| Kapitel | 4 |
| Titel | Widgets |
| Voraussetzungen | Grundkenntnisse in MicroPython |
| Getestet mit | LVGL 9.x |
| Schwierigkeitsgrad | ★☆☆☆☆ |
| Benötigte Zeit | 15 Minuten |
| Status | in Arbeit |
Kapitel 4 – Widgets[Bearbeiten | Quelltext bearbeiten]
Lernziel[Bearbeiten | Quelltext bearbeiten]
Nach diesem Kapitel weißt du,
- was ein Widget ist,
- wie Widgets erzeugt werden,
- warum jedes Widget einen Parent benötigt.
Was ist ein Widget?[Bearbeiten | Quelltext bearbeiten]
Als Widget bezeichnet man die grafischen Elemente einer Benutzeroberfläche.
Beispiele für Widgets sind
- Label
- Button
- Slider
- Checkbox
- Switch
- TextArea
- Image
Fast alles, was auf dem Bildschirm sichtbar ist, ist ein Widget.
In den folgenden Unterkapiteln werden die verschiedenen Widgets ausführlich besprochen:
Widgets erzeugen[Bearbeiten | Quelltext bearbeiten]
Alle Widgets werden nach demselben Schema erzeugt wie andere LVGL-Objekte auch:
widget = lv.Widget(parent)Der Parent bestimmt, zu welchem Objekt das neue Widget gehört und dargestellt wird.
Eigenschaften von Widgets[Bearbeiten | Quelltext bearbeiten]
Jedes Widget besitzt Eigenschaften.
Dazu gehören beispielsweise
- Position
- Größe
- Sichtbarkeit
- Styles
- Ereignisse (Events)
Viele Methoden sind deshalb bei allen Widgets identisch.
Beispiele sind
- center()
- align()
- add_style()
Der LVGL-Ereigniskreislauf[Bearbeiten | Quelltext bearbeiten]
Viele LVGL-Widgets reagieren auf Benutzereingaben, z. B.
- Buttons
- Slider
- Schalter (Switch)
- Textfelder
- Roller
Damit diese Eingaben verarbeitet werden können, muss ihnen ein eine Funktion zugewiesen werden und LVGL muss regelmäßig auf Useraktionen abfragen.
Funktion zuweisen[Bearbeiten | Quelltext bearbeiten]
Widgets auf Betätigung abfragen.[Bearbeiten | Quelltext bearbeiten]
lv.task_handler()In vielen Programmen erfolgt dies in einer Endlosschleife:
while True:
lv.task_handler()
time.sleep_ms(5)Dabei übernimmt LVGL unter anderem:
- Verarbeitung von Touch-Eingaben
- Auslösen von Events
- Aktualisierung von Timern
- Fortsetzen von Animationen
- Neuzeichnen geänderter Widgets
Hinweis
Einige Display-Treiber oder Firmware-Versionen übernehmen den regelmäßigen Aufruf von lv.task_handler() automatisch. In diesem Fall ist keine eigene Schleife erforderlich.
Insbesondere das Modul task_handler.py im lvgl_micropython Packet kann diese Aufgabe automatisieren:
import task_handler th = task_handler.TaskHandler()
Dann wird der Screen alle 33 ms aktualisiert. Außerdem wird lvgl durch dieses Modul initialisiert, falls das noch nicht geschehen ist.
Hinweis
LVGL zeichnet Änderungen nicht sofort auf das Display. Erst lv.task_handler() verarbeitet ausstehende Ereignisse und aktualisiert die Anzeige.
Es gibt zwei Möglichkeiten:
- Manuelles Aktualisieren durch regelmäßigen Aufruf von lv.task_handler().
- Automatisches Aktualisieren mit task_handler.TaskHandler(), der lv.task_handler() über einen periodischen Timer aufruft.
Für Lern- und Testprogramme verwenden wir im Handbuch überwiegend die erste Variante, da sie den Programmablauf besser nachvollziehbar macht.
Zusammenfassung[Bearbeiten | Quelltext bearbeiten]
Alle Widgets folgen demselben Grundprinzip.
Wer dieses Prinzip verstanden hat, kann sich schnell in neue Widgets einarbeiten.