Variabel eines Programms importieren

  • Hallo,

    ich habe folgendes Problem. Ich habe ein Programm um die Entfernung zu Messen.

    Nun ich habe ich ein weiter Programm geschrieben für ein GUI. Daher meine Frage wie bekomme ich den Wert aus der Messung in das neue Programm.

    Habe es mit import from probiert, doch dann würde das Programm der Messung gestartet und das GUI öffnete sich nicht mehr.

    Habe beide Programm Codes angeheftet und hoffe mir kann jemand helfen danke im voraus.

  • Besser ist ein eigenes Modul, aber fuer einen kurzen Check:


    * Die Funktion distanz hier ausschneiden und ins GUI-Programm einsetzen

    * Die noetigen imports und die Initialisierung der GPIOs ebenfalls

    * Mit einem Button distanz aufrufen und das Ergebnis in der GUI anzeigen

  • Hallo,


    da die zwei Dateien nicht so umfangreich sind, würde ich die Funktion, die die Distanz misst in dein GUI-Programm einbauen.

    Mal unabhängig davon, wie dein Programm aufgebaut ist und das du anstatt 'GPIO' mal 'gpiozero' anschauen solltest habe ich die Funktion einfach mal genommen und eingebaut. Das könnte dann so aussehen, ungetestet:


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Uh. Globale Variablen überall.


    Wenn man etwas periodisch in tkinter machen will, muss man die after Methode verwenden.

    • Official Post

    Hier mal ein kleiner (ungetesteter) Ansatz mit gpiozero.

  • nun habe ich leider ein neues Problem :rolleyes:

    Ich habe versucht einen zweiten Sensor einzubauen und habe es versucht wie hyle zu machen.

    Jedoch liest er keine Messwerte aus....

    Hoofe jemand kann mir helfen vielen Dank

  • Hallo,


    eigentlich sollte nur die Werte des zweiten Sensors angezeigt werden, wenn du deinen Code ausführst. Das tut es aber nicht, weil es 'ausgabe_label' in deiner zweiten Funktion nicht gibt, dafür aber ein 'laber'.

    Gab es keine Fehlermeldung?


    Beide Sensoren funktionieren nicht, weil du in deinem Code an den Namen 'text' erst dein Sensor1-Aufruf bindest und danach bindest du an den gleichen Namen den Aufruf von Sensor2 und überschreibst damit den Aufruf von Sensor1.


    Hoffe du kannst damit schon mal etwas anfangen, wenn es mir nachher reicht, reiche ich noch Informationen nach.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Hallo,


    die Sensorwerte an sich überschreibst du nicht, du überschreibst den Inhalt deines 'text'. Das heißt du brauchst zwei verschiedene Namen, an die die jeweils die Ausgabe des Sensors und den restlichen Text den du mit ausgibst bindest.

    Du solltest dich jetzt mit der Verwendung von Funktionen vertraut machen und in den meisten Fällen wird auf kurz oder lang auch die Objektorientierte Programmierung benötigt, wenn man GUI's erstellt. Für beides lohnt sich die Einarbeitung mit dem offiziellen Python-Tutorial.

    Konstanten schreibt man in Python GANZ_GROSS, Variablen und Funktionen schreibt man klein_mit_unterstrich.

    Namen werden nicht durchnummeriert, wenn man das braucht verwendet man eher eine Liste. Das liegt daran das man sinnvolle, sprechende Namen verwenden soll, das erleichtert das Lesen des Quellcodes. Bei dir zum Beispiel 'sensor_left' und 'sensor_right'. Oder wie erwähnt eine Liste.

    Beispielhaft habe ich den Code von dir und hyle mal abgeändert und darin absichtlich für die Sensoren eine Liste verwendet und für 'text' aber unterschiedliche Namen gewählt. Damit du siehst was ich meine.

    Ich kann den Code nicht testen und er wird bestimmt nicht auf anhieb funktionieren, aber versuche es mal und poste dann die ganzen Fehlermeldungen.



    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Danke dir für deine Hilfe.

    Hier einmal die Fehlermeldung

    Code
    Traceback (most recent call last):
      File "/home/pi/lcd/forumhilfe.py", line 14
        app = App("Distance", width="30000", height="10000", bg="#05032b") app.text_color="white"
                                                                             ^
    SyntaxError: invalid syntax
  • Oh natürlich, da ist die Zeile falsch ein kopiert


    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • jetzt habe ich leider einen neuen Fehler

    Code
    Traceback (most recent call last):
      File "/home/pi/lcd/forumhilfe.py", line 21
        text_left = Text(box_left, text="Daten werden gelesen...",size=100 ,grid=[0,0]) text_left.repeat(1000, read_sensors[0])
                                                                                                ^
    SyntaxError: invalid syntax
  • Oh man, soviel hat es mir beim kopieren noch nie verhauen.

    Jetzt bin ich mal gespannt, ansonsten kann ich es heute Abend testen und richtig fertigstellen, falls es bis dahin nicht läuft.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Ja es öffnet sich das GUI aber es steht noch nichts drin und nach dem schließen stand da folgender Fehler

    Code
    Traceback (most recent call last):
      File "/home/pi/lcd/forumhilfe.py", line 29, in <module>
        main()
      File "/home/pi/lcd/forumhilfe.py", line 21, in main
        text.value = "{}{}{}".format(ausgabe_label,SENSOR_VALUE,ausgabe_einheit)
    NameError: name 'text' is not defined

    Ich danke dir für deine Hilfe, dass hätte ich so niemals hinbekommen

  • Hallo,


    letzter Versuch ohne Testmöglichkeit und ohne ordentlicher Programmaufbau.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    Edited 2 times, last by Dennis89 ().

  • Nachtrag: Das Programm objektorientiert aufgebaut könnte wie folgt aussehen. Mir ist klar dass das schwer zu verstehen ist bzw. ohne Einarbeitung in das Thema nicht möglich ist (so ging/geht es zumindest mir). Aber eventuell willst du dein Programm noch erweitern und das geht so am einfachsten.


    Hoffentlich ohne Tippfehler.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Hi,

    danke dir Dennis89 beide Sensoren messen die Entfernung.

    Nur sie updaten sich nicht und der wert steht still. Wärst du vielleicht so nett es dir noch einmal an zuschauen??

    nach dem schließen der GUI kam auch noch folgende Fehlermeldung

    Code
    invalid command name "3059648472read_sensors"
        while executing
    "3059648472read_sensors"
        ("after" script)