Kapitel 21 – Grafische Grundformen in LVGL

Aus Micropython
Zur Navigation springen Zur Suche springen
LVGL 9 mit MicroPython
Kapitel 21
Titel Grafische Grundformen in LVGL
Voraussetzungen Grundkenntnisse in MicroPython
Getestet mit LVGL 9.x
Schwierigkeitsgrad ★★☆☆☆
Benötigte Zeit 40 Minuten
Status in Arbeit

Kapitel 21 – Grafische Grundformen in LVGL[Bearbeiten | Quelltext bearbeiten]

Lernziel[Bearbeiten | Quelltext bearbeiten]

Nach diesem Kapitel kannst du

  • einfache geometrische Formen in LVGL darstellen,
  • den Unterschied zwischen UI-Objekten und Canvas verstehen,
  • entscheiden, wann Widgets oder Zeichnen sinnvoll ist.

Zwei Wege in LVGL[Bearbeiten | Quelltext bearbeiten]

LVGL bietet zwei grundsätzliche Möglichkeiten für grafische Darstellung:

1. Widgets (UI-basiert)[Bearbeiten | Quelltext bearbeiten]

  • lv.obj()
  • Labels, Buttons, Container
  • Formen über Styles

2. Canvas (Grafik-basiert)[Bearbeiten | Quelltext bearbeiten]

  • freie Zeichnung
  • Linien, Kreise, Rechtecke
  • pixelgenaue Kontrolle

1. Rechteck als Widget[Bearbeiten | Quelltext bearbeiten]

Ein einfaches Rechteck ist ein normales Objekt.

import lvgl as lv

scr = lv.screen_active()

rect = lv.obj(scr)
rect.set_size(120, 60)
rect.align(lv.ALIGN.CENTER, 0, 0)

Rechteck einfärben[Bearbeiten | Quelltext bearbeiten]

style = lv.style_t()
style.init()
style.set_bg_color(lv.color_hex(0xFF0000))
style.set_bg_opa(lv.OPA.COVER)

rect.add_style(style, 0)

Erklärung[Bearbeiten | Quelltext bearbeiten]

Ein lv.obj() ist standardmäßig ein Rechteck ohne Farbe.

Die Farbe kommt über Styles.

2. Kreis über Radius[Bearbeiten | Quelltext bearbeiten]

LVGL hat kein eigenes Kreis-Widget.

Ein Kreis entsteht durch Radius.

circle = lv.obj(scr)
circle.set_size(80, 80)
circle.align(lv.ALIGN.CENTER, 0, 0)
circle.set_style_radius(40, 0)

Erklärung[Bearbeiten | Quelltext bearbeiten]

Wenn der Radius = halbe Breite ist, entsteht ein Kreis.

3. Unterschied Widget vs Canvas[Bearbeiten | Quelltext bearbeiten]

Widget Ansatz[Bearbeiten | Quelltext bearbeiten]

  • schnell
  • einfach
  • ideal für UI

Canvas Ansatz[Bearbeiten | Quelltext bearbeiten]

  • flexibel
  • pixelgenau
  • mehr Aufwand

4. Canvas (freie Zeichnung)[Bearbeiten | Quelltext bearbeiten]

Canvas erlaubt echte Grafikoperationen.

Canvas erstellen[Bearbeiten | Quelltext bearbeiten]

buf = bytearray(100 * 100 * 2)

canvas = lv.canvas(scr)
canvas.set_buffer(buf, 100, 100, lv.COLOR_FORMAT.RGB565)
canvas.center()

Rechteck zeichnen[Bearbeiten | Quelltext bearbeiten]

dsc = lv.draw_rect_dsc_t()
dsc.init()
dsc.bg_color = lv.color_hex(0x00FF00)
dsc.bg_opa = lv.OPA.COVER

canvas.draw_rect(10, 10, 50, 30, dsc)

Kreis zeichnen[Bearbeiten | Quelltext bearbeiten]

cdsc = lv.draw_arc_dsc_t()
cdsc.init()
cdsc.color = lv.color_hex(0x0000FF)
cdsc.width = 3

canvas.draw_arc(50, 50, 20, 0, 360, cdsc)

Typische Anwendung Canvas[Bearbeiten | Quelltext bearbeiten]

  • eigene Visualisierungen
  • Sensor-Grafiken
  • Radar-Darstellungen
  • Spezialanzeigen

Wichtiger Hinweis[Bearbeiten | Quelltext bearbeiten]

Hinweis

Canvas benötigt RAM.

Auf ESP32 sollte die Größe bewusst gewählt werden.

Typischer Fehler[Bearbeiten | Quelltext bearbeiten]

Achtung

Viele nutzen Canvas für einfache UI-Elemente.

Das ist unnötig kompliziert – Widgets reichen meist aus.

Merke[Bearbeiten | Quelltext bearbeiten]

Merke

Widgets für UI – Canvas für Grafik.

Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

  • Rechtecke entstehen über lv.obj()
  • Kreise über Radius
  • Canvas ist für freie Grafik
  • Widgets sind für 90% aller Fälle ausreichend