LVGL 02 Grundlagen

Aus Micropython
Zur Navigation springen Zur Suche springen
LVGL 9 mit MicroPython
Kapitel 1
Titel Die Philosophie von LVGL
Voraussetzungen Grundkenntnisse in MicroPython
Getestet mit LVGL 9.x
Schwierigkeitsgrad ★☆☆☆☆
Benötigte Zeit 15 Minuten
Status in Arbeit

Kapitel 1 – Die Philosophie von LVGL[Bearbeiten | Quelltext bearbeiten]

Lernziel[Bearbeiten | Quelltext bearbeiten]

Nach diesem Kapitel weißt du,

  • warum LVGL entwickelt wurde,
  • wie LVGL aufgebaut ist,
  • was ein Objekt ist,
  • warum jedes Objekt einen Parent besitzt.

Was ist LVGL?[Bearbeiten | Quelltext bearbeiten]

LVGL ist die Abkürzung für

Light and Versatile Graphics Library

Es handelt sich um eine Grafikbibliothek, die grafische Benutzeroberflächen für Mikrocontroller und Embedded-Systeme bereitstellt.

LVGL zeichnet nicht einfach nur Pixel.

Stattdessen arbeitet LVGL mit Objekten.

Ein Objekt kann beispielsweise sein

  • ein Text
  • ein Button
  • ein Schieberegler
  • ein Bild
  • eine Tabelle
  • eine Tastatur

Dadurch lassen sich auch komplexe Benutzeroberflächen mit relativ wenig Programmcode erstellen.

Objektorientiertes Denken[Bearbeiten | Quelltext bearbeiten]

Fast alles in LVGL ist ein Objekt.

Ein Label ist ein Objekt.

Ein Button ist ein Objekt.

Ein Fenster ist ein Objekt.

Ein Bildschirm ist ebenfalls ein Objekt.

Diese Objekte besitzen Eigenschaften.

Beispiele sind

  • Position
  • Größe
  • Farbe
  • Schrift
  • Sichtbarkeit

Außerdem können Objekte auf Ereignisse reagieren.

Ein Button kann beispielsweise auf einen Fingertipp reagieren.

Die Objekt-Hierarchie[Bearbeiten | Quelltext bearbeiten]

Alle Objekte sind baumförmig organisiert.


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

Jedes Objekt besitzt genau einen Parent.

Ein Parent kann beliebig viele Child-Objekte besitzen.

Diese Hierarchie ist eine der wichtigsten Grundlagen von LVGL.

Warum gibt es einen Parent?[Bearbeiten | Quelltext bearbeiten]

Ein Parent übernimmt mehrere Aufgaben.

  • Verwaltung seiner Child-Objekte
  • Positionierung
  • Clipping
  • Speicherverwaltung

Wird ein Parent gelöscht, werden automatisch auch alle Child-Objekte gelöscht.

Dadurch entstehen keine "verwaisten" Widgets.

Das erste LVGL-Objekt[Bearbeiten | Quelltext bearbeiten]

import lvgl as lv

scr = lv.screen_active()

label = lv.label(scr)

Hier geschieht bereits sehr viel.

scr = lv.screen_active()

liefert den aktuell sichtbaren Bildschirm.

label = lv.label(scr)

erzeugt ein neues Label.

Als Parent wird der aktuelle Bildschirm angegeben.

Das Label gehört damit zum Bildschirm.

Merke

  • Ohne Parent gibt es in LVGL kein Objekt.
  • Jedes Widget gehört genau einem Parent.
  • Diese Regel gilt für nahezu alle Widgets in LVGL.

Die Eventloop[Bearbeiten | Quelltext bearbeiten]

Hinweise zu den Beispielen:[Bearbeiten | Quelltext bearbeiten]

Der derzeitige Stand der Beispielprogramme bezieht sich auf ein CYD mit 2,8" Display, ST7789 Grafikcontroller und XPT2046 Touch Controller.

Dafür gibt es eine Ini-Datei die das Gerät soweit einrichtet, das die Beispiel ausgeführt werden können. Sie kann hier herunter geladen werden:

Sie muß in das Verzeichnis lib kopiert werden. Wenn lib nicht existert, was meist am Anfang der Fall ist, muß es angelegt werden.

Bei den Beispielprogrammen ist der Import eingebaut. Für eigene Programme muß diese Zeile am Anfang des Programms stehen:

from cyd_st7789_28 import *

Eine Besprechung deser Datei erfolgt in einem Anhang.

Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

LVGL arbeitet objektorientiert.

Alle Widgets sind in einer Baumstruktur organisiert.

Wer diese Hierarchie verstanden hat, wird später Styles, Layouts und Events wesentlich leichter verstehen.