Selbstprogrammierte GUI-Steuerung fürs Display

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hi @ all,

    Tjoar, ich hab auch einfach mal Lust, mein Bastelobjekt vorzustellen ;) :

    Ausgangssituation
    Vorhandene Hardware:


    Mein Ziel war es, eine Art „Framework“ für den Raspberry zu programmieren, um mit wenig Aufwand eine touchfähige Oberfläche programmieren zu können.

    Beim Hochfahren des Raspis sieht man, ca. 10-15 Sekunden nach dem Hochfahren, folgendes Bild:

    (Draufklicken zum Vergrößern)
    xqd5n175ouvv.png


    Ehe ich mich versah, habe ich damit nun eine Steuerzentrale geschaffen, um nur mit dem Raspberry + Touchdisplay + Netzteil sämtliche Dienste mit nur einem Fingerzeig starten und beenden zu können.

    Mal ein „richter“ GUI-Screenshot:
    3y2rh91a9mjc.png

    Um zu sehen, wie das „Framework“ im Einsatz funktioniert, hier ein Ausschnitt des Quellcodes für diese drei GUI-Elemente. Als Programmiersprache kam dabei Python zum Einsatz, als grafische Oberfläche wird Tkinter verwendet:

    Spoiler anzeigen


    Ziemlich selbsterklärend, oder? Bevor ich aber zu sehr selbstgefällig werde: Der eigentliche Quellcode hinter dem Modul „pitouch“ (da liegt das „Framework“ für die GUI) sieht ziemlich „hingehackt“ aus und ist alles andere als sauber. Mich solls dennoch nicht stören, da es für meine Verhältnisse einfach funktioniert^^.

    Noch ein Screenshot, diesmal an der Stelle, wenn man „Systemeinstellungen“ auswählt:
    8a4ozjueux6y.png

    Ich denke, spätestens jetzt kann man langsam erahnen, was ich alles damit steuern kann ;)

    Das Schöne ist, dass ich mir in Python natürlich sämtliche Abfragen schnappen und in andere (Linux-)Befehle koppeln kann; selbst die Erstellung der Buttons kann ich, wie es sich für eine nützliche Programmiersprache gehört, an Bedingungen knüpfen (z.B. ob der Samba-Server, der für die Dateifreigabe zuständig ist, schon läuft – dann wäre die Schaltfläche rot und als Text stünde dort stattdessen „Freigabe beenden“...)

    ---

    Als weitere Herausforderung habe ich auch eine USB-Kamera angeschlossen, die mit einem Klick (auch das Touch-Display) das Bild in 20fps auf das kleine Touch-Display überträgt, Mplayer sei Dank – und bei einem weiteren Klick beendet sich Mplayer auch wieder (was allerdings in einer Mplayer-Konfigurationsdatei eingestellt werden muss).

    ---

    Wie habe ich das alles konfiguriert, dass die grafische Oberfläche startet? Zuerst habe ich eingestellt, dass der Benutzer root automatisch eingeloggt wird (ich nutze Archlinux auf dem RPi und habe diese Anleitung dazu benutzt. Unter Raspbian ist die Vorgehensweise aber definitiv anders...)

    (Warum ausgerechnet Benutzer root, der auf „alles“ Zugriff hat? Ich gebs offen und ehrlich zu: Bequemlichkeit. Ich hatte keine Lust mich darum zu kümmern, welche Rechte erforderlich sind, um das Datum einstellen zu können (was auf meiner programmierten GUI möglich ist). Da der RPi sowieso nicht direkt im Internet verbunden und in einer sicheren Umgebung ist, sollten die Sicherheitsbedenken trotzdem minimal sein...)

    Danach habe ich eine Datei im Homeverzeichnis namens .bash_login (inkl. dem führenden Punkt) erstellt mit folgendem Inhalt:

    Code
    #!/usr/bin/bash
    
    
    pgrep xinit || xinit /usr/bin/python2 /root/pitouch/main.py


    (Mein Skript läuft derzeit nur unter Python Version 2.x... In Archlinux heißt die dafür zuständige Binary auch „python2“, während sie unter Raspbian „python“ heißt!)

    Die Datei habe ich in einer Linux-Konsole auch noch ausführbar gemacht:

    Code
    chmod +x .bash_login

    Sowohl mein programmiertes „Framework“ als auch der vorher gepostete Code liegt im Homeverzeichnis von Benutzer root unter „pitouch“.

    Danach habe ich noch erforderliche Pakete installiert, um auch Bilder in der GUI darstellen zu können (nochmal erwähnt, unter Arch!)

    Code
    pacman -S python2-pillow

    Nach einem Neustart lief dann alles so, wie ich es wollte! :)

    Alles mit der GUI verbundene (z.B. Mplayer, die Samba-Freigabe und das Mounten des USB-Sticks) mussten natürlich auch konfiguriert werden, aber das ist so umfangreich, dass man dafür eigene Beiträge verfassen müsste^^.

    ---

    Tjoar... Falls jemand Interesse am Quellcode hat, ich stelle ihn mal hier rein:

    Spoiler anzeigen


    ACHTUNG: Ich weise explizit darauf hin, dass der Quellcode alles andere als „sauber“ ist, das heißt: Es fehlen u.a. Fehlerbehandlungen und es wurde nicht auf irgendwelche Spezialausnahmen geachtet. Die Verwendung des Quellcodes geschieht auf eigene Gefahr, ich bin nicht für Schäden, ob direkt oder indirekt mit dem Quellcode verursacht, verantwortlich! (Ich würde die Funktion „USB-Stick formatieren“ sein lassen, wenn eine USB-Platte angeschlossen ist!)

    Ein Hinweis noch: Das Starten und Beenden von Diensten und der Shutdown des RPi wurden - wieder - für Archlinux ausgelegt. Das Haupt-"Framework" pitouch.py sollte zwar auch unter Raspbian einwandfrei laufen, ich glaube aber kaum, dass das bei main.py der Fall sein wird^^. (Vermutung: Auf Raspbian wird die main.py zwar laufen, aber gefühlt 90% der Schaltflächen werden nicht funktionieren...)

    Downloadlink:
    pitouch-2016-03-16.zip

    Tjoar²... Ich mag einfach die Tatsache, dass ich mal eben die wichtigsten Dienste einstellen und konfigurieren kann, ohne dass ich gleich eine Tastatur oder ein LAN-Kabel anschließen und PuTTy anwerfen muss. :)

    EDIT: Einfach weil ich Lust darauf habe, ein aktueller Screenshot vom 20.01.2016 - ich arbeite gerade an eine Art "USB-Virenscanner für Unterwegs", dessen Imagedatei ich bei Bedarf zum Download anbieten werde. Die GUI sieht momentan so aus:
    loschen.png

    Einmal editiert, zuletzt von Astorek86 (29. März 2017 um 22:30)

  • Tjoa jetzt das ganze noch in schön !

    Spass bei seite sehr schöne idee und umsetzung....mich nervt es auch häufig das man des kleine ding immer an zig kabellage hängen muss um ihn vernünftig konfigurieren zu können.
    Putty un wlan stick sind zwar auch möglich jedoch muss dazu wlan und ssl bereits konfiguriert sein und will man dann was am wlan ändern wirds knifflig......

    Aber nochma aufs aussehen zurück, könnte man da nicht sowas wie ne smartphone oberfläche und deine buttons quasi als apps drauf ablegen ? Wäre design mässig etwas zeitgemäßer. ( nur meckern auf hohem Niveau ^^)

    Einmal editiert, zuletzt von treeshort (24. November 2014 um 20:50)

  • Nice ;)

    Dankeschön :) . Auch wenn ich etwas spät antworte^^.

    Aber nochma aufs aussehen zurück, könnte man da nicht sowas wie ne smartphone oberfläche und deine buttons quasi als apps drauf ablegen ? Wäre design mässig etwas zeitgemäßer.

    Theoretisch schon, nur ist das ein Aufwand, den ich mir nicht wirklich antun will^^.

    Das Ganze war ja von Vornherein geplant, dass ausschließlich die GUI läuft - keine Fensterverwaltung, garnix. Würde einerseits bei meinem Touchscreen auch keinen Sinn machen (ist noch ein rein kapazitiver Screen, der Bewegungen o.Ä. überhaupt nicht erkennen kann. Wer schonmal mit so einer Oberfläche versucht hat, Fenster zu verschieben oder einfach nur zu scrollen, weiß, wie schlimm darauf diese Art der Bedienung ist), andererseits werden auch wenig Ressourcen benötigt, weil ich Spielereien eben auslasse (ca. 30 Sekunden nach der Stromzufuhr ist die GUI gestartet und auch sofort einsatzbereit).

    Bin halt ITler und kein GUI-Designer, für mich steht Pragmatismus und Nutzbarkeit im Vordergrund *g* ;)

    ...

    Ich denke aber, ich werde mein kleines Projekt noch ein wenig überarbeiten und versuchen, eine Möglichkeit einzubauen, auch Bilder (Icons) in den Buttons darstellen zu können.

    Zitat

    Putty un wlan stick sind zwar auch möglich jedoch muss dazu wlan und ssl bereits konfiguriert sein und will man dann was am wlan ändern wirds knifflig...

    ... Mal ganz davon abgesehen, dass man einem Laien nicht wirklich erklären kann, wie er mit PuTTy mal eben eine WLAN-Verbindung aufbaut ;) . Noch so ein Grund, weshalb ich die Oberfläche programmiert habe. Meine Nicht-IT-affinen Mitbewohner können dank der GUI ebenfalls alles bedienen, was ich ihnen programmiere. Momentan wird das Ding z.B. in Kombination mit USB-Stick und USB-Kamera als portables Überwachungssystem benutzt^^...

  • Hallo,

    der Thread ist ja schon ein bisschen älter, tortzdem hoffe ich, dass mir jemand antwortet.

    Ich suche schon seit längerem eine solche Touchscreen-GUI für ein kleines Projekt und deine Variante scheint endlich das zu sein was ich brauche.

    Kurz zur Info, ich fotografiere sehr viel und bin oft an Orten an denen ich keine Lust habe mein Laptop mitzunehmen. Jetzt war meine Idee, den kleinen Pi in ein Gehäuse zusammen mit einem SD-Kartenleser und einer 2,5" Festplatte zu vereinen um Sicherungen von meinen Bilder machen zu können.

    Wenn ich das richtig verstanden habe, kann man in deiner GUI jeden Button mit einem Systembefehl oder einem weitren Script hinterlegen richtig ?

    Mein aktueller Stand ist es, dass eigentlich alles schon ganz gut läuft, vom Platte und SD-Karte Mounten bis hin zum Kopieren (über die normale GUI oder über ein Script). Dein Projekt würde meins also an sich super komplettieren.
    Eine Frage habe ich allerdings noch da ich mich mit Phyton nur rudimentär auskenne.
    Wäre es möglich einen Fortschrittsbalken zu implementieren der den Status des Kopiervorgangs abbildet ?

    Würde mich sehr über eine Antwort freuen
    Lorenz

  • Also ich hab gerade mal unter Rasbian light getestet und zumindest über das terminal mit x11 forwarding funktionierte es[emoji14]
    Ich danke dir. Werde dein Projekt dazu nutzen mich mal mit der Materie zu beschäftigen.

    Gruß

    PS: Hat vielleicht jemand ein Paar Tipps zu guten Tutorials zum Thema Python und TKinter für "Anfänger"? :P

    Einmal editiert, zuletzt von WaldiBVB (22. Februar 2016 um 14:33)

  • @ Astorek86: Könntest du mir vielleicht helfen? Ich habe mir deinen Code angesehen und schaffe es momentan nicht ein Bild auf den Button zu bekommen.

    Code
    p.set_image("Settings.gif")

    funktioniert leider nicht wie ich erwartet habe. Er sagt Bilddatei wurde nicht gefunden. Hab alles versucht. Mit Pfad angabe und ohne. Kein erfolg.

    Außerdem würde mich interessieren ob es möglich ist den Fenster Hintergrund in schwarz zu färben. Die Buttons sind ja einfach zu ändern.


    Gruß und Danke

    Einmal editiert, zuletzt von WaldiBVB (11. März 2016 um 16:23)

  • Oha... Ich habe seinerzeit den Quellcode nichtmehr aktualisiert; ich glaube, die Methode rund um "set_image" habe ich seinerzeit falsch implementiert^^. Eine aktualisierte Version hab ich, allerdings hab ich erst Montag wieder Zugriff darauf u. kann den Quelltext erst dann hochladen.

    Wie man direkt das Fenster schwärzt, weiß ich leider nicht. Vermutlich wirds da auch eine Methode geben... Von meinem derzeitigen Rechner aus kann ich leider nicht nachsehen^^...

    EDIT: Hier die aktuelle Version. Ich habe auf die Schnelle einfach mal alle neuen Grafiken mit dazugepackt; die Darstellung sollte unter Python2 UND Python3 sofort laufen (auch unter Windows, sofern dort einer der beiden Python-Interpreter installiert ist), allerdings ist momentan noch garkeine Funktionalität integriert, d.h. die Schaltflächen schalten maximal in andere Menüs um, führen aber sonst nichts aus^^. Ich arbeite noch daran, da ich zwischenzeitlich in der main.py alles umgeschrieben habe^^.
    (Zertifikat ist selbstsigniert, weshalb der Browser vermutlich eine "Der Verbindung wird nicht getraut"-Meldung ausspucken wird. Ist normal, ich kriege das momentan noch nicht weg^^)

    pitouch-2016-03-16.zip
    (Funfact: Das ist ein RPi2B-Server, der da läuft...)

    EDIT²: Damit die Bilder angezeigt werden, muss auch "Pillow", die Python Image Library, installiert sein (unter Raspbian, Debian und Ubuntu mit "apt-get install python-imaging" für Python3, "apt-get install python-imaging-tk" für Python2, unter Archlinux "pacman -S python-pillow" für Python3 und "pacman -S python2-pillow" für Python2. Windows-Benutzer wechseln mittels CMD (die mit "als Administrator ausführen" gestartet wurde), ins Python-Installations-Verzeichnis, und tippen "pip install pillow" ein).

    Einmal editiert, zuletzt von Astorek86 (29. März 2017 um 22:31)

  • Da mein Browser grade abgestürzt ist, nochmal in Kurzform:

    Damit die Bilder auch angezeigt werden, muss noch eine zusätzliche Bibliothek installiert werden. Andernfalls wird maximal der Text, aber keine Bilder angezeigt.

    Benutzt ihr:

    • Raspbian, Debian oder Ubuntu mit Python 3:[font="Courier New"] sudo apt-get install python-imaging[/font]
    • Raspbian, Debian oder Ubuntu mit Python 2:[font="Courier New"] sudo apt-get install python-imaging-tk[/font]
    • Archlinux mit Python 3:[font="Courier New"] sudo pacman -S python-pillow[/font]
    • Archlinux mit Python 2:[font="Courier New"] sudo pacman -S python2-pillow[/font]
    • Windows: Startet CMD als Administrator, wechselt in das Verzeichnis, in dem ihr Python installiert habt (z.B. [font="Courier New"] cd C:\Python27 [/font] , wenn dort Python installiert wurde), wechselt dann in das "Scripts"-Verzeichnis ([font="Courier New"] cd Scripts [/font]) und installiert mittels "pip" die Library nach ([font="Courier New"] pip install Pillow [/font]). Funktioniert das nicht, probiert "easy_install" ( [font="Courier New"]easy_install Pillow[/font] ).

    Einmal editiert, zuletzt von Astorek86 (22. März 2016 um 12:49)

  • Hey - das sieht genauuuuu so aus, wie ich mir das vorgestellt habe :D

    So ein Projekt stand auch auf meiner ToDo Liste für dieses Jahr. Kann ich ja jetzt streichen und auf Deinem aufbauen. :thumbs1:


    [TOM]

  • Ich hatte allerdings festgestellt das die Buttons nicht mehr gleich groß sind sobald die Bilder geladen sind. Es gibt so leichten versatz.

    Aber trotzdem super arbeit !

    Einmal editiert, zuletzt von WaldiBVB (23. März 2016 um 08:57)

  • Ich hatte allerdings festgestellt das die Buttons nicht mehr gleich groß sind sobald die Bilder geladen sind. Es gibt so leichten versatz.

    Das stimmt, daran beiße ich mir momentan die Zähne aus^^. Vermutlich werd ich früher oder später das so umbauen, dass zu große Bilder automatisch verkleinert werden. Irgendwie zerreißt es mir da das Layout, ich weiß auch noch nicht warum^^...

  • Hey, das sieht ja mega cool aus!
    Leider funktioniert der Link mit der aktuelleren Version nicht mehr... Wäre es möglich dies zu fixen? ;)
    Da ich mich mit Python noch gar nicht auskenne möchte ich es mal wagen..

  • Hey, das sieht ja mega cool aus!
    Leider funktioniert der Link mit der aktuelleren Version nicht mehr... Wäre es möglich dies zu fixen? ;)
    Da ich mich mit Python noch gar nicht auskenne möchte ich es mal wagen..

    pitouch-2016-03-16.zip ;)

    Ich ändere auch alle früheren Beiträge um, damit die Downloadlinks in diesem Thread wieder stimmen^^.

    EDIT: Damit die Bilder auch angezeigt werden, muss noch eine zusätzliche Bibliothek installiert werden. Andernfalls wird maximal der Text, aber keine Bilder angezeigt.

    Benutzt ihr:

    • Raspbian, Debian oder Ubuntu mit Python 3:[font="Courier New"] sudo apt-get install python-imaging[/font]
    • Raspbian, Debian oder Ubuntu mit Python 2:[font="Courier New"] sudo apt-get install python-imaging-tk[/font]
    • Archlinux mit Python 3:[font="Courier New"] sudo pacman -S python-pillow[/font]
    • Archlinux mit Python 2:[font="Courier New"] sudo pacman -S python2-pillow[/font]
    • Windows: Startet CMD als Administrator, wechselt in das Verzeichnis, in dem ihr Python installiert habt (z.B. [font="Courier New"] cd C:\Python27 [/font] , wenn dort Python installiert wurde), wechselt dann in das "Scripts"-Verzeichnis ([font="Courier New"] cd Scripts [/font]) und installiert mittels "pip" die Library nach ([font="Courier New"] pip install Pillow [/font]). Funktioniert das nicht, probiert "easy_install" ( [font="Courier New"]easy_install Pillow[/font] ).

    Einmal editiert, zuletzt von Astorek86 (30. März 2017 um 09:40)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!