Posts by dte

    Hi.


    Wie kann ich ein über PIL geladenes GIF-Bild an Pygame übergeben?


    Folgendes Code-Beispiel funktioniert zwar, jedoch nur mit einem JPG - bei einem GIF wird stattdessen ein leeres, weißes Bild ausgegeben:


    VG Dennis


    UPDATE:

    Hey ho.


    Ich habe mir eine Benutzeroberfläche mit eigenen Buttons aus GIF-Dateien zusammengestellt. Hier möchte ich nun das "Thema" meiner GUI verändern können.

    (Für meine derzeitigen Image-Funktionen nutze ich aktuell die Module base64 und pygame.)


    Meine GIF-Buttons sind alle 2-farbig (schwarz und weiss) - wie kann ich nun dieses geladene Bild verändern à la:


    Code
    schwarz = (0,0,0)
    weiss = (255,255,255)
    blau = (0,0,255)
    rot = (255,0,0)
    
    for farbpixel in bilddatei_original:
        if farbpixel==schwarz: bilddatei_neu.append(blau)
        if farbpixel==weiss: bilddatei_neu.append(rot)

    ?

    (Also so sinngemäß - zwecks Verdeutlichung meines Vorhabens)


    Hab schon einiges an Code-Beispielen aus dem WWW ausprobiert, aber hier fehlt mir wohl noch das abschließende Verständnis für die Image-Bearbeitung.


    Hat hier jemand eine Idee zur Umsetzung?


    VG + ein schönes WE
    Dennis



    UPDATE:


    Habe mittlerweile eine für meine Zwecke zufriedenstellende Lösung gefunden:

    Python
    from PIL import Image
    
    vorlage = Image.open('vorlage.gif')
    palette_neu = [255,0,0,0,0,255]
    vorlage.putpalette(palette_neu)
    vorlage.save('thema1.gif')

    So wird aus meinem Schwarz-weiß-GIF...


    ein Rot-blau-GIF...


    Allerdings verdoppelt sich fast die Dateigröße von 1.025 Bytes auf 1.909 Bytes. Ich vermute mal, da PIL mir das Bild nun mit einer 256-Farbpalette speichert. Hier habe ich noch keine Lösung gefunden, wie ich auf dieses gewünschte Ergebnis kommen könnte:


    vorlage.quantize(2) beeinflusst das Ergebnis leider nicht.


    Hat an dieser Stelle jemand einen Tipp für mich?



    VG Dennis

    __blackjack__


    Danke für den Bugfix. Habe ich auch verstanden, weshalb round zu einem Fehler hätte führen können ==> auf int geändert! Top! :)


    hyle

    Alles klar. So wie ich es verstanden habe, wird diese Warnung dann aber in einem zukünftigen Update von SDL nicht mehr erscheinen, richtig?


    Euch allen ein schönes Wochenende

    Nice: apt search libsdl2 kannte ich auch noch nicht - dann werde ich da von Zeit zu Zeit einmal hereinschauen.


    Aber: Problem gelöst!

    Es kommt zwar weiterhin bei jedem event.type==FINGERDOWN an event.type==FINGERUP die besagte Fehlermeldung - jedoch nur in der Konsole, welche man ja gar nicht auf dem angeschlossenen Touchscreen sieht, da die Bildschirmausgabe hier ja durch Pygame erfolgt. Lediglich über ssh würde man die Meldung dann auf dem Client sehen.


    Und über

    Code
    if event.type==FINGERDOWN or event.type==FINGERUP:
        loc_x = round((event.x)*1280)
        loc_y = round((event.y)*720)  

    bekomme ich trotzdem die x/y-Koordinaten des Touchpunktes ausgegeben.


    Danke für Eure raschen Hilfen - echt super, wie schnell man sich mit Eurer Forenhilfe in so etwas reinfuchsen kann. Dankeschön!


    Viele Grüsse
    Dennis

    hyle


    Ich glaube jetzt auch zu verstehen, wofür die libsdl2-image-2.0-0 zuständig ist. Ohne diese Datei konnte ich nur unkomprimierte Bitmaps über pygame.image.load() nutzen. Auf pygame.image.get_extended() erhielt ich bislang auch immer ein False - Nach dem Einbinden kommt hier dann ein True und jetzt werden auch meine GIFs geladen. :) Dankeschön!


    Aus Deinem vorherigen Post bezügl. der ALSA-Meldung und der Tatsache, dass "Mixer" irgendwie nach Sound klingt, schließe ich, dass die Mixer-Datei demnach für die Soundausgabe zuständig ist - richtig? (Ist für mein Vorhaben nun tatsächlich nicht relevant - aber es ist schön, wenn ich den Sinn hinter den nötigen Aktionen verstehe) - auch hier noch einmal: Danke Dir!


    Da ich meine GIF-Buttons nun laden kann und mir mit diesen eine Benutzeroberfläche zusammengebaut habe, bin ich nun beim Zuweisen von Benutzereingaben angekommen. Die Eingaben meiner angeschlossenen USB-Maus funktionieren auch - jedoch soll die Bedienung letztendlich ja über den Touchscreen erfolgen. Hier erhalte ich nun folgende Fehlermeldung:

    INFO: The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list <https://discourse.libsdl.org/> EVDEV KeyCode 330


    Hierzu habe ich unter https://discourse.libsdl.org/t/evdev-keycode-330/25652 herausgelesen, dass dieser Fehler noch bis SDL2-Version 2.0.9 bestand, ab 2.0.10 jedoch gefixt worden sein soll.


    Ich tue mich gerade noch sehr schwer damit, eigene Installationspakete zusammenzustellen und daraus eine ausführbare Installation zu bauen. Kannst Du mir sagen, wie ich die SDL2-Version updaten kann. Aktuell ist scheinbar 2.0.17 vorhanden.


    Viele Grüsse
    Dennis

    ...oder Du verbindest HDMI mit einem Moni/TV...

    Und wieder ein Volltreffer! Ich war über ssh drauf und der letzte Start des RPis erfolgte ohne angeschlossenem Touch-Display. Nach einem Neustart und erneuter Ausführung direkt über die Konsole kam dann keine Fehlermeldung mehr.


    Erneut: Dankeschön!


    Du hast Pygame über pip, installiert, das hat keine Ahnung von der Paketverwaltung der Linux-Distribution, und umgekehrt.

    Das klingt logisch und erklärt es. Denke, dass ich das verstanden habe. Auch Dir: Dankeschön! :)

    Hey Freunde,


    beschämt möchte ich mich noch einmal ratsuchend an Euch wenden.


    Ich habe gerade Feierabend im Hoome-Office und wollte mich jetzt Python mit Pygame widmen. Gemäß dem Tutorial https://www.python-lernen.de/pygame-tutorial.htm wollte ich nun Schritt für Schritt beginnen - aber leider kam nun die nächste Hürde...


    Mein Testprogramm gui.py besteht derzeit nur aus zwei Zeilen und sieht folgendermaßen aus:

    Code
    import pygame
    pygame.init()


    Und schon bekomme ich wieder Fehlermeldungen - dieses Mal geht es scheinbar um die fehlende Möglichkeit einer Soundausgabe meines Raspberry Pi Zeros (welche ich ja auch gar nicht benötige):


    • Wie kann ich hier weiter vorgehen? Muss ich nun alle Dateien, so wie mit den vorherigen libsdl2-2.0-0, libsdl2-mixer-2.0-0 und libsdl2-image-2.0-0 verfahren?
    • Ist das bei mir wirklich alles so der Normalfall? Ich frage nur, weil... na.... wenn ich irgendetwas über sudo install installiere und dann sehe wie viele Quellen und Pakete in der jeweiligen Installation enthalten sind, wieso wurden diese dann nicht schon alle bei der Installation von Pygame mit erledigt?
    • Ist die Nutzung von Pygame daher überhaupt auf einem abgespeckten Zero vorgesehen bzw. möglich?

    Viele Grüsse

    Dennis

    Hey Dennis89.


    Vielen Dank!


    Wenn also der "Super User" etwas installiert, dann kann auch nur er selbst auf die Installation zugreifen. Bislang habe ich immer gedacht, dass der su der einzige ist, der etwas installieren kann, diese Installation jedoch auch allen anderen zur Verfügung stellt.


    Jetzt habe ich es verstanden:

    Wenn mit sudo pip3 install pygame installiert worden ist, dann kann ich es auch nur mit sudo python3 nutzen.

    Also lieber nur pip3 install pygame, dann geht der Aufruf auch ohne sudo, also nur python3 (und dann import pygame, usw.)


    Super.


    Danke für die Erläuterung. Das hilft sicher bei zukünftigen Problemen, wenn man das Grundlegende versteht. Nochmal: Dankeschön!


    VG Dennis

    Ansonsten musst du eventuell 'libSDL2-2.0' manuell installieren. Auf diese Lösung stoßt man zumindest wenn man nach dem Fehler sucht

    WAAAAH! Es hat geklappt. Danke, danke, danke... Tausend Dank!


    Das hier hatte gefehlt: sudo apt-get install -y libsdl2-2.0-0


    Code
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen.... Fertig
    Das folgende Paket...
    ....
    ....
    ....
    ....
    Trigger für libc-bin (2.28-10+rpt1+rpi1) werden verarbeitet ... Fertig


    Und siehe da:

    Code
    dte@raspberrypi:~ $ python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pygame
    pygame 2.0.1 (SDL 2.0.9, Python 3.7.3)
    Hello from the pygame community. https://www.pygame.org/contribute.html
    >>> exit()
    dte@raspberrypi:~ $


    Vielen Dank. Jetzt kann es dann endlich losgehen. Super Forum - super Hilfe - 1A. Dankeschön. :) :) :)


    VG Dennis

    Aha. Okay.


    Also gleich nach dem ersten Boot alle Maßnahmen unter sudo su durchführen? Wäre ich dann so überall auf Nummer sicher?

    Nachtrag:


    Jetzt habe ich natürlich aufgrund einiger Methoden schon ganz schön im System herumgewurschtelt.

    Vielleicht ist es daher nun sinnvoll, das PI-OS Lite Image noch einmal frisch auf die Karte zu kopieren und noch einmal bei null zu beginnen.


    Bislang bin ich nach der Installation immer folgendermaßen vorgegangen:

    Erster Boot:

    - sudo raspi-config

    - WiFi-Verbindung hergestellt

    - Tastatur und Ländereinstellung auf de_DE gesetzt

    - ssh enabled

    - neuen Benutzer (dte) angelegt und mit usermod -aG sudo dte Root-Rechte vergeben

    - dann Updates durchgeführt: sudo apt-get update && sudo apt-get upgrade

    - jetzt pip/pip3 installiert: sudo apt install python-pip und sudo apt install python3-pip

    - abschließend dann: sudo pip install pygame und sudo pip3 install pygame


    Ist dieses Vorgehen so überhaupt korrekt gewesen oder hab ich mir da irgendwo schon etwas verbaut?

    Hallo hyle,


    danke für Deine rasche Rückmeldung.


    Hier kommt die Info, dass es scheinbar schon vorhanden sei:

    Code
    dte@raspberrypi:~ $ sudo pip3 install pygame
    [sudo] Passwort für dte:
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Requirement already satisfied: pygame in /usr/local/lib/python3.7/dist-packages (2.0.1)


    Aber wenn ich das Modul dann in Python3 importieren möchte, erhalte ich das hier:

    Python
    dte@raspberrypi:~ $ python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pygame
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python3.7/dist-packages/pygame/__init__.py", line 81, in <module>
    from pygame.base import * # pylint: disable=wildcard-import; lgtm[py/polluting-import]
    ImportError: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory

    Hallo zusammen.


    Ich versuche bereits seit mehreren Tagen das Modul pygame über pip zu installieren. Jedoch schlägt dies immer wieder fehl. Zahlreiche Tipps aus diversen Google-Treffern waren leider bislang auch nicht zielführend. Hat hier jemand noch eine Idee?


    VG Dennis



    IST-Zustand:

    - Rapberry Pi Zero (WH) mit dem Raspberry Pi OS Lite (32-bit) ohne Desktopumgebung

    - Python 2.7.16

    - Python 3.7.3

    - pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)

    - pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)



    Ausgabe nach erfolglosem Versuch:

    Hallo.


    Ich möchte gerne mit Python eine einfache, über einen Touch-HDMI-Monitor bedienbare Oberfläche erstellen, welche dann verschiedene GPIO-Pins steuert.


    Hierfür möchte ich meinen Zero WH nutzen - daher ohne Desktop-Integration (mit dem Desktop ist das unter Thonny alles ziemlich lahm gewesen). In diversen Foren kam die Info, dass so ein Projekt idealerweise mit dem Modul Pygame umzusetzen sei, statt tkinter in einer Desktop-Umgebung.


    Sprich: eigene Buttons mit Geometrie malen oder als GIF einbinden und dann mit Mauskoordinaten und ButtonPress arbeiten.


    Ist die Auskunft so korrekt?


    VG Dennis

    Hallo zusammen.


    Ich heiße Dennis, bin schon fast Vierz..... ach, ist ja auch egal ;) - komme aus Schleswig-Holstein und wollte mich jetzt einmal mit Raspberrys, Python und den GPIO-Anschlüssen beschäftigen. Mein erstes Projekt soll eine LED-Lauflicht-Steuerung auf einem Raspberry Pi Zero WH werden, was bislang auch schon prima funktioniert. Lediglich hängt es derzeit bei ein paar Schwierigkeiten bei der Installation von diversen Paketen über PIP - aber dazu mach ich dann nochmal einen neuen Thread in der entsprechenden Kategorie auf.


    Ich erhoffe mir, hier etwas Unterstützung bei der Umsetzung zu finden und sage daher schon einmal im Voraus "Dankeschön"! :)


    VG Dennis