LVGL 08 Events

Aus Micropython
Zur Navigation springen Zur Suche springen
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

e

enthä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.CLICKED

wird 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