LVGL 08 Events
(Weitergeleitet von Kapitel 9 – Events)
| LVGL 9 mit MicroPython | |
|---|---|
| Kapitel | 9 |
| Titel | Events |
| Voraussetzungen | Grundkenntnisse in MicroPython |
| Getestet mit | LVGL 9.x |
| Schwierigkeitsgrad | ★★☆☆☆ |
| Benötigte Zeit | 35 Minuten |
| Status | in Arbeit |
Kapitel 8 – Events
[Bearbeiten | Quelltext bearbeiten]Lernziel
[Bearbeiten | Quelltext bearbeiten]Nach diesem Kapitel kannst du
- auf Benutzeraktionen reagieren,
- Event-Handler schreiben,
- zwischen verschiedenen Event-Typen unterscheiden,
- mehrere Widgets mit einem Handler steuern.
Was ist ein Event?
[Bearbeiten | Quelltext bearbeiten]Ein Event ist ein Ereignis, das von LVGL ausgelöst wird.
Beispiele:
- ein Button wird gedrückt
- ein Slider wird bewegt
- ein Widget erhält den Fokus
- ein Objekt wird gelöscht
Events sind der wichtigste Mechanismus für Interaktion.
Einfaches Event Beispiel
[Bearbeiten | Quelltext bearbeiten]import lvgl as lv
scr = lv.screen_active()
btn = lv.button(scr)
btn.center()
label = lv.label(btn)
label.set_text("OK")
def on_click(e):
print("Button gedrückt")
btn.add_event_cb(on_click, lv.EVENT.CLICKED, None)Erklärung
[Bearbeiten | Quelltext bearbeiten]Die Funktion
def on_click(e):wird immer dann aufgerufen, wenn das Event ausgelöst wird.
Mit
btn.add_event_cb(...)wird der Handler registriert.
Was ist e?
[Bearbeiten | Quelltext bearbeiten]Der Parameter
eenthält Informationen über das Event.
Dazu gehören:
- welches Widget das Event ausgelöst hat
- welcher Event-Typ ausgelöst wurde
Event-Typ CLICKED
[Bearbeiten | Quelltext bearbeiten]lv.EVENT.CLICKEDwird ausgelöst, wenn der Benutzer ein Widget antippt und wieder loslässt.
Weitere wichtige Events
[Bearbeiten | Quelltext bearbeiten]- PRESSED → beim Drücken
- RELEASED → beim Loslassen
- LONG_PRESSED → langes Drücken
- VALUE_CHANGED → Wert hat sich geändert
Mehrere Widgets, ein Handler
[Bearbeiten | Quelltext bearbeiten]Mehrere Buttons können denselben Handler verwenden.
def on_click(e):
obj = e.get_target()
print("Gedrückt:", obj)
btn1.add_event_cb(on_click, lv.EVENT.CLICKED, None)
btn2.add_event_cb(on_click, lv.EVENT.CLICKED, None)Erklärung
[Bearbeiten | Quelltext bearbeiten]Mit
e.get_target()wird das auslösende Widget ermittelt.
Typischer Fehler
[Bearbeiten | Quelltext bearbeiten]Achtung
Viele versuchen, Events direkt im Widget zu speichern.
In LVGL werden Events immer über Callbacks verarbeitet.
Beispiel mit mehreren Buttons
[Bearbeiten | Quelltext bearbeiten]def on_click(e):
obj = e.get_target()
print("Button gedrückt:", obj)
btn1 = lv.button(scr)
btn1.align(lv.ALIGN.LEFT_MID, 10, 0)
btn2 = lv.button(scr)
btn2.align(lv.ALIGN.RIGHT_MID, -10, 0)
btn1.add_event_cb(on_click, lv.EVENT.CLICKED, None)
btn2.add_event_cb(on_click, lv.EVENT.CLICKED, None)Hinweis
[Bearbeiten | Quelltext bearbeiten]Hinweis
Ein Event-Handler kann für viele Widgets gleichzeitig verwendet werden.
Das reduziert Code und vereinfacht die Struktur.
Best Practice
[Bearbeiten | Quelltext bearbeiten]- Immer e.get_target() verwenden
- Möglichst wenige Handler schreiben
- Logik zentralisieren
Zusammenfassung
[Bearbeiten | Quelltext bearbeiten]- Events steuern Interaktion in LVGL
- CLICKED ist der wichtigste Einstieg
- Event-Handler sind normale Python-Funktionen
- e enthält Informationen zum Auslöser
- Ein Handler kann mehrere Widgets bedienen