Seite 1 von 1

Auswahl-Menü für das Display des TTGO: Neue Version

Verfasst: Fr 3. Dez 2021, 13:31
von Heinrichs
In meinem Beitrag https://www.forum.g-heinrichs.de/viewto ... f=18&t=144 habe ich bereits ein Programm zur Bereitstellung von Menüs für das Modul TTGO T-Display vorgestellt. Das neue Programm unterscheidet sich optisch kaum von der alten Version:

menu_2.jpg
TTGO mit Menü
menu_2.jpg (27.06 KiB) 8398 mal betrachtet

Es ist aber leistungsstärker und noch entscheidender: Die Einbindung in eigene Programme wurde wesentlich erleichtert. Hier zunächst die wesentlichen Merkmale:
  • Jedes Item besteht aus einem Item-Namen und (optional) aus einem zusätzlichen Parameter, z. B. einer Zeichenkette oder einer Zahl.
  • Das Menü kann aus beliebig vielen Items bestehen.
  • Von diesen Items wird jeweils eine bestimmte Anzahl (items_pro_seite) auf einer Seite angezeigt.
  • Der Abstand der Items auf dem Display (zeilenhoehe) und die Anzahl der Items pro Seite kann (in sinnvollen Grenzen) vorgegeben werden.
  • Mit dem Taster A (GPIO0) kann durch das Menü gescrollt werden; dabei wird - wenn nötig - auf die nächste Seite oder auch zurück zum ersten Item gesprungen. Die Auswahl des aktuellen Items (in gelber Farbe angezeigt) erfolgt mit dem Taster B (GPIO35).
  • Das Menü wird als Instanz einer Klasse MyMenu erzeugt, welche sich in dem Modul myMenu.py (s. Anhang) befindet. Mit Hilfe dieser Instanz kann ein Menü mit wenigen eigenen Programmzeilen erstellt werden.
Wie man dabei vorgeht, zeigt das folgende Programmbeispiel:

Code: Alles auswählen

from myMenu import MyMenu

########### Angaben zu Inhalt und Darstellung des Menüs  #########

menu_liste =    [
                  ['Item 1', 'Info 1'], 
                  ['Item 2'],                    # kein Parameter
                  ['Item 3', 'Info 3'],
                  ['Item 4', 44],                # Zahl als Parameter
                  ['Item 5', 'Info 5'],
                  ['Item 6', 'Info 6'],
                 ]

zeilenhoehe = 15      # Zeilenhöhe für die Ausgabe eines Items (min. 15) 
items_pro_seite = 4   # Anzahl der Items pro Seite (Je größer zeilenhoehe ist,
                      # desto kleiner muss items_pro_seite gewählt werden.)

menu = MyMenu(menu_liste, zeilenhoehe, items_pro_seite)
item, param = menu.waehlen()

print('item: ', item)
print('param: ', param)

Bemerkungen zu diesem Programm:

Zunächst wird die Klasse myMenu aus dem Modul MyMenu importiert. Bitte beachten Sie, dass die zugehörige Datei MyMenu.py auf den ESP32 hochgeladen sein muss.

Nun werden sämtliche Items in Form einer einzigen Liste dargestellt; in unserem Fall wird dies Liste der Variablen menu_liste zugeordnet. Jedes Item besteht dabei seinerseits aus einer Liste aus einem oder zwei Elementen. Dabei gibt das erste Element den Namen des Items an, der auf dem Display als Menü-Punkt angegeben wird. Das zweite Element ist optional.

Anschließend werden zeilenhoehe (in Pixeln) und items_pro_seite festgelegt.

Mit diesen Angaben wird eine Instanz menu der Klasse MyMenu erzeugt:

menu = MyMenu(menu_liste, zeilenhoehe, items_pro_seite)

Durch die waehlen-Methode wird nun
  1. auf dem Display das Menü dargestellt, in welchem Sie jetzt mit dem Scroll-Taster A von Item zu Item scrollen können,
  2. nach dem Betätigen des Auswahl-Tasters B ein Tupel mit dem Namen des ausgewählten Items und dem zugehörigen Parameter zurückgegeben; diese Werte werden in unserem Fall den Variablen item und param zugewiesen. Außerdem wird das Display gelöscht.

Danach werden die beiden Angaben zu Testzwecken auf dem Terminal ausgegeben. Falls für das betreffende Item kein Parameter angegeben wurde (wie bei Item 2 in unserem Beispiel), wird der Variablen der Wert False zugewiesen.

.