Gui mit Ttinker etc.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ascii92
User
Beiträge: 2
Registriert: Dienstag 5. Februar 2019, 22:28

Hallo zusammen,

ich habe mir einen Getränkeautomaten ähnlich dem folgenden Link gebaut:

https://www.youtube.com/watch?v=hJIkJ9x0-JQ

Diesen möchte ich gerne mittels GUI über einen Raspberry Pi + Touchdisplay steuern wobei mir weder die Steuerung an sich sondern die grafische Bedienoberfläche Probleme bereitet.
Ich möchte ein Fenster erzeugen in dem ich durch "Pfeil links" oder "Pfeil rechts" wiederum ein neues Untermenü aufrufe ohne ein neues Fenster zu öffnen.
Der Button soll dann abhängig vom aufgerufenen Untermenü einen Routine aufrufen die den Roboter steuert.

Habe darüber nachgedacht für jedes Untermenü ein Label zu erzeugen und dann mittels goto in die einzelnen Labels zu springen.
Gibt es noch andere Lösungsansätze ?

Gruß Sebastian

Bild
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ascii92: Ich werde aus der Beschreibung nicht wirklich schlau. Wenn Du von Menüs sprichst, meinst Du wahrscheinlich keine Tk-Menüs. Und dann soll *der* Button etwas in Abhängigkeit vom Untermenü machen. Ist das jetzt ein Tk-Button, oder ein physikalischer Taster der an den GPIO-Pins hängt? Was ist „Pfeil links“ und „Pfeil rechts“? Buttons in der GUI? Die Pfeiltasten auf einer angeschlossenen Tastatur? Oder auch Taster an GPIO-Pins?

Du willst „,mittels goto in die einzelnen Labels […] springen”? Reden wir hier von Python? Da gibt es kein ``goto`` und GUI-Programmierung funktioniert *ganz* anders als so eine Ablaufsteuerung bei *Du* die ganze Zeit in der Hand hast wie der Code abgearbeitet wird. Auch in Programmiersprachen die tatsächlich noch so etwas wie ``goto`` kennen – C zum Beispiel, wo man das aber auch eher selten oder zumindest für andere Zwecke als ”normale” Ablaufsteuerung verwendet.

Du müsstest das Problem etwas genauer beschreiben, und Python bis mindestens einschliesslich objektorientierter Programmierung (OOP) lernen, denn die braucht man für jedes nicht-triviale GUI-Programm. Und dann musst Du Dich mit ereignisorientierter Programmierung von GUI-Rahmenwerken anfreunden. Also nicht das Du die Kontrolle hast, sondern Methoden registrierst die bei bestimmten Ereignissen von der GUI-Hauptschleife aufgerufen werden und dann die Kontrolle an eben jene Hauptschleife abgibst. Und die dann aufgerufenen Methoden dürfen jeweils nur *kurz* etwas machen und müssen dann wieder zur Hauptschleife zurückkehren. Sonst friert die GUI ein.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
ascii92
User
Beiträge: 2
Registriert: Dienstag 5. Februar 2019, 22:28

------------------------------------------------------------------------------------------
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||----|nmmmmmmmmmmmmmmmmmmmmmmmm |----|
|| < |nmmmmmmmmmmmmmmmmmmmmmmmm | > |
||----|nmmmmmmmmmmmmmmmmmmmmmmmm |----|
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||nmmmmmmmmmmmmmmmmmmmmmmmmmmm |
||----------||nmmmmmmmmmmmmmmmmmmmmmmm |
||----------||nmmmmmmmmmmmmmmmmmmmmmmm |
------------------------------------------------------------------------------------------

An den GPIOs sind keine Taster etc, diese sollen virtuell in der GUI implementiert sein und über ein Touchscreen am Pi betätigt werden.
Es sollen drei Buttons vorhanden sein: "Pfeil links", "Pfeil rechts" und "Bestätigen.
Nach dem Starten des Programms soll die obige Skizze mit dem Bild des entsprechenden Getränks erscheinen.
Soll dieses Ausgewählt werden wird der Button, unten links bestätigt was zur Folge hat, dass der Code welcher den Roboter steuert ausgeführt wird.

Wird der Button "Pfeil rechts" gedrückt öffnet sich im selben Fenster ein anders Bild, eine andere Beschriftung und der Button unten links soll entsprechend einen Code entsprechend der Zusammensetzung des Getränks ausführen.
Durch die "Pfeilbuttons" soll quasi zwischen den einzelnen Optionen navigiert werden.

Ich habe mich schon etwas mit Tkinter befasst und ich könnte jedes einzelne Menü implementieren, doch wie es mit gelingt diese durch die beiden Buttons in einem Fenster zu steuern ist mir unklar.
Das ganze durch Loops etc zu implementieren schien mir extrem unübersichtlich und aufwendig (Bei ca 10 Menüs mit jeweils 3 Button)
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ascii92: Was genau heisst denn ”Menü”? Du hast auch keine 10 Menüs mit jeweils 3 Buttons. Die Buttons sind ja immer gleich, also braucht man die nur einmal.

Ein klick auf die Pfeiltasten muss halt den Zustand der GUI und dem Modell ändern das hinter der GUI steht. Wie sieht es denn mit objektorientierter Programmierung aus? Hast Du das schon drauf? Falls nicht würde ich empfehlen es zu lernen, und am besten erst einmal ohne GUI, denn dann hast Du weniger neues auf einmal.

Der Code der den Roboter steuert darf entweder nur ganz kurz laufen, oder er muss aufgeteilt werden können in Aufrufe die jeweils nur ganz kurz laufen, oder Du fängst Dir mit Threads die ganzen Probleme ein, welche die so mit sich bringen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten