Wie sage ich es in Python ? (Einsteigerfragen)

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo ich habe ein paar Fragen hier erst mal der aktuelle Code:

    Übrigens das ist mein erstes mal mit Python... also wenn es irgendwelche Fehler gibt bitte sagen!

    Meine Fragen:

    1. GPIO.setup (Start, GPIO.IN) soll mal ersetzt werden. Also wenn eine bestimmte Uhrzeit ist soll das passieren was "Start" aktuell ausführt. Was gibt es und wie funktioniert es?

    2. Die Vorübergehenden Merker (GPIO 24-25)... ich weiß nicht ob ich die in diesem Skript noch verwenden werden aber das könnte sein deswegen frage ich nochmal lieber nochmal wie mache, denn ich verstehe die Erklärungen die man im Internet sind nicht hoffe hier wird mir besser geholfen.

    Danke schon mal im voraus!

  • Hallo,

    kannst du bitte dein Vorhaben etwas detaillierter beschreiben? Ich verstehe ehrlich gesagt deine Fragen 1 und 2 nicht so ganz.

    Mal was allgemeines zu Python:

    Beim importieren wird 'as' zum umbenennen benutzt. Du nennst 'GPIO' in 'GPIO' um. Es gibt verschiedene Arten Module zu importieren.

    Entweder du importierst RPi:

    Code
    import RPi
    
    # Zugriff auf GPIO:
    RPi.GPIO.setup(...)

    So kannst du dann alles nutzen was 'RPi' zur Verfügung hat.

    Wenn du nur 'GPIO' nutzen möchtest, dann kannst du das so machen:

    Python
    from RPi import GPIO
    
    # Zugriff auf GPIO:
    GPIO.setup(...)

    Man kann dann noch die Module umbenennen, zum Beispiel:

    Python
     from datetime import datetime as dt
    
    print(dt.now())

    Zur Gestaltung von Python-Programme kannst du dir mal den Style-Guid anschauen.

    Hier wo bei dir Sachen wie 'GPIO.setmode(GPIO:BCM)', 'Luftventil' und weiteres steht, da sollten nur Konstanten, Funktionen und Klassen definiert werden. Das nennt man auch Modulebene. Konstanten sind in deinem Fall die GPIO-Nummern.

    Die schreibt man in Python dann KOMPLETT_GROSS. Alle anderen Namen, mit Ausnahme von Klassen, die schreibt man in CamelCase-Schreibweise, schreibt man klein_mit_unterstrich.

    Dein Programm wird aus einer Funktion mit dem Name 'main' gesteuert. Dort wird dann zu Beginn auch die GPIO definiert und im Anschluss werden daraus weitere Funktionen aufgerufen.

    Wenn du GPIO verwendest, musst du sicherstellen damit nach dem Programmende die GPIO-Belegung aufgeräumt wird. Dazu musst du 'cleanup' aufrufen. Damit dass immer ausgeführt wird, egal wie dein Programm beendet wird, verwendet man 'try/finally'

    Der Aufbau ist dann nachher in etwa so:

    Zum Schluss noch ein Hinweis, gpiozero ist eine Bibliothek zum steuern von GPIO's und ist meiner Meinung nach viel einfacher in der Anwendung. Schau es dir mal an.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • der Hintergrund meiner Frage ist

    NewTron Radio oder Peppy Player benutzen pygame-Grafik mit z.Z Modul pynanosvg und das ist abgekündigt (="deprecated") aber noch vorhanden in (Buster) Python 3.7.3. mit pip3 install pynanosvg war das Modul in Python 3 vorhanden und man konnte es importieren mit import svg. In (Bullseye) Python 3.9. führt pip3 install pynanosvg auf Fehler (hier)

    Im NewTron Radio wir die Grafik für Fenster oder Teile davon aus SVG-Dateien eingelesen und in ein pygame-image umgewandelt:

    Code
    import svg
    ...
        svgimg = svg.Parser.parse(svgbuf)
        rast = svg.Rasterizer()
        strbuf = rast.rasterize(svgimg, w_svg, h_svg)
        image = pygame.image.frombuffer(strbuf, size, "RGBA")
    function pygame_svg

    pygame_svg liest alle (Sub-)Windows von NewTron Radio ein, das sind SVG-Dateien, ändert Größe und Farbe und legt sie im Speicher ab.

    Mit der Suchmaschine finde ich "cairo" und "librsvg" als Alternative zu pynanosvg.

    Code
    import cairo
    import rsvg
    ...
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
    ctx = cairo.Context(surface)
    svg = rsvg.Handle(file="test.svg")
    svg.render_cairo(ctx)
    image = pygame.image.frombuffer(surface.get_data(), (WIDTH, HEIGHT),"ARGB")

    Meine Python-Kenntnisse sind sehr basic.

    Als Python ?Modul für "cairo" habe ich pycairo gefunden.

    Fragen:

    • Wie heißt das Python ?Modul für rsvg?
    • Kann ich rsvg.Handle auch einen String "strbuf" siehe pygame_svg übergeben?
    • Pygame soll schon SVG lesen können. Wie heißt die Function?

    Schönen Gruß, kle

  • Hallo.
    Wie ist das hier? Darf man hier noch Einsteigerfragen stellen? Ist ja seit mehr als 365 Tagen nix mehr passiert...

    Ich versuch's mal:

    Bis jetzt habe ich mir immer einen PI genommen und "live" so lange meine Programme geändert, bis sie gemacht haben, was ich wollte.
    Nun ist aber aktuell ein PI schlecht zu bekommen und auch nicht ganz billig :(

    Kurzum: Ich habe mir python mit der IDLE auf meinen Windows Rechner installiert und will hier den Code solange optimieren, bis es passt...

    Bei der Studie diverser Artikel ist mir nun auch der Styleguide pep8 untergekommen...

    Kann man diesen in die IDLE integrieren? Es ist wie gesagt eine Windows Installation und ich konnte bisher nur Linux Tutorials finden.
    Vielleicht kennt ja jemand den richtigen Link, der mich weiterbringt...
    Danke!
    Grüße
    Tom

  • Moinsen,

    IDLE ist nunmehr schon ein Urgestein ;)
    Ob das überhaupt noch Verwendung findet, kann und will ich nicht einschätzen. Die meisten oder hier auch oft genannt ist Thonny.
    Das ist eine sehr brauchbare IDE mit Debugging Möglichkeiten, und der recht bequemen Funktion externe Bibliotheken einzubinden. Zudem kann diese auch für µController Boards wie dem RasPi PICO PICO W, oder dem ESP in Verbindung mit µPython genutzt werden. Diese IDE ist für falls alle gängigen Betriebssysteme verfügbar, und ich auch Grundbestandteil der RasbianOS Installation mit GUI.

    Franky

  • Hallo zusammen,

    coole Idee mit dem Thread!!

    Ich hätte gleich eine kleine Frage. Falls die Frage hier nicht hinpasst, schreibt mir bitte, dann erstelle ich einen separaten Thread.

    Ich möchte in einem Programm mehrere Zeilen „überspringen“. Ich hatte schonmal so etwas ähnliches angefragt und aber festgestellt, dass es in Python erstmal keine gotos gibt. Allerdings wollte ich nochmal nachhaken, da es jetzt darum geht Zeilen zu überspringen und nicht zurückzukehren.

    Danke für eure Antworten!

    Kaptain

    Wie heißt eine Schlange, die exakt 3,14 Meter lang ist?

    πthon

    Einmal editiert, zuletzt von KaptainAhoibrause (21. Dezember 2023 um 09:07)

  • Hallo zusammen,

    danke für eure Antworten!!

    Ich denke ich poste einfach mal den Code:

    Es sollte ein Programm werden, mit dem man Vorwiderstände berechnen kann. Und weil ich halt Lust dazu hatte, wollte ich etwas hinzufügen, was verhindert dass mir beim Widerstand minus-Zahlen ausgeworfen werden.

    Wahrscheinlich ist die Lösung offensichtlich, nur das ich nicht drauf komme :longline:

    Danke für eure Hilfe :danke_ATDE:

    Kaptain

    Wie heißt eine Schlange, die exakt 3,14 Meter lang ist?

    πthon

  • Intern wird natuerlich alles auf Assemblerebene mit gotos gehandhabt. Nur sollten gotos auf der hoeheren Programmiersprache nicht mehr sichtbar sein. Ich finde ein if ... else ist einfach besser zu lesen als ein if ... continue. Ist aber mein persoenlicher Geschmack und wir muessen darueber wohl auch kaum diskutieren und den TE verwirren.

    KaptainAhoibrause Beides sind Loesungen und ich persoenlich finde die mit else besser da leichter lesbar. Einrueckungen ueberliest man nicht - aber ein kleines continue durchaus. Tell findet die mit continue besser. Du kannst Dich entscheiden welche Loesung Dir besser gefaellt :)

Jetzt mitmachen!

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