Posts by Fipsi

    Guten Morgen,


    ich hab jetzt noch ein wenig weiter experimentiert und bin dabei auf folgenden Stand gekommen:



    Dabei hab ich jetzt beim Thread (class BackgroundJobs) folgendes Problem:

    - wenn ich in der Methode run die while True-Schleife hab, reagiert der Thread nicht mehr auf das ansprechen der Methoden startCounter und stopCounter.

    - wenn ich die while True-Schleife in der Methode run entferne, dann reagiert der Thread zwar auf das ansprechen der anderen Methoden, aber die run läuft dann nicht mehr.


    Wie krieg ich das hin, dass die run-Methode der backgroundJobs dauerhaft läuft und ich gleichzeitig noch andere Methoden im Thread ansprechen kann?


    Vielen Dank und

    liebe Grüße


    Fipsi


    Ein Edit, damit ich hier nicht so viel rum Spam:


    Nachdem ich noch mal einiges gesucht, noch mehr gelesen und noch viel mehr experimentiert hab, bin ich auf folgendes gekommen:



    Erklärung dazu:
    Wenn man will, dass ein Thread dauerhaft im Hintergrund läuft, also nicht nur auf ein Event reagiert und dann wieder beendet wird, darf man nicht QObject und moveToThread verwenden, sondern muss QThread verwenden. In der QThread-Klasse muss man dann die run-Methode überschreiben und eh vola.

    Zu den Signals und Slots:

    Die Signale darf man nicht in der init-Methode definieren, sondern direkt in der Klasse, dann funktioniert auch das emit. Außerdem darf das Signal nicht die zu übermittelnde Variable sein, sondern ist eine weitere Variable.

    Die Slot-Methoden müssen mit @pyqtSlot deklariert werden.


    Jetzt kann ich richtig an die Arbeit gehen, ich denke, jetzt hab ich alles raus gefunden, was ich brauch :bravo2:


    Danke für die Denkanstöße und

    liebe Grüße


    Fipsi

    Hallo zusammen,


    also ich hab jetzt noch mal etwas tiefer das Thema Qt mit QThread angeschaut und dabei folgendes geschrieben:



    Dabei hab ich jetzt noch Probleme, die ich nicht über die Tutorials verstanden hab:


    - Wie kann ich jetzt Funktionen der BackgroundJobs über Buttons im Window triggern?

    - Wie kann ich über Ereignisse im BackgroundJobs anzeigen im Window ändern?


    Ich hab da bei Tutorials immer was mit .connect() gefunden, aber ich versteh nicht ganz, wie:

    - Über das .emit kann ich von BackgroundJobs Variablen im Window bearbeiten, oder?

    - Wie kann ich über z. B. einen Button im Window die Funktion dosomething() im BackgroundJobs anstoßen?

    - Wie kann ich aus BackgroundJobs die Funktion connectBox() im Window anstoßen? (am besten noch mit der Möglichkeit Variablen übergeben zu können)


    Kann mir da mal bitte einer helfen, vom Schlauch aufzustehen?


    Vielen Dank schon mal,

    schönes Wochenende und

    liebe Grüße


    Fipsi

    Okay, dann muss ich mich da noch mal neu/tiefer in das Thema einlesen.

    Danke __blackjack__ für deine Geduld und Ausführungen.

    Und Entschuldigung, dass ich momentan immer so lang zum Antworten brauch, hab gerade kaum Zeit hierfür.


    Liebe Grüße


    Fipsi

    Die erste Frage bezieht sich darauf, dass du meintest, man greift mit Signalen/Slots auf die GUI zu. Das mach ich doch? Oder reden wir aneinander vorbei?


    Generell, um alle folgenden Absätze auch gleich aufzugreifen, muss ich sagen, dass ich das so von einem Tutorial übernommen hab. Die Umwandlung von *.ui zu *.py und wie dann die GUI geladen wird, hab ich so 1:1 aus dem Tutorial, von mir selbst stammt die Klasse Thread (aber auch ziemlich aus einem Tutorial übernommen) und dann weiter unten das ab "server_adress".


    Ich musste aber leider schon feststellen, dass das trotzdem nicht so ganz funktioniert, wie ich es mir vorgestellt hab.

    Wenn ich das Programm starte, läuft der QThread los und de-/aktiviert den Button im 2 Sek-Takt. Sobald ich dann aber einmal den Button gedrückt hab, "schläft" der Thread ein und macht nichts mehr, der sollte aber weiter laufen. :conf:


    Ja, ich versuch grad ehrlich gesagt aus der Verschaltelungsaffäre raus zu kommen und erst mal zu schauen, ob Python überhaupt das kann, was ich von ihm will :-/


    Liebe Grüße


    Fipsi

    Das Problem an der Sache ist ja eben, dass ich keine Konfigurations- oder Datendateien finden konnte. Ich hab nur die zig FSCK-Files und in der anderen Partition n haufen leere Ordner oder snap-Files. Könnte fast meinen, da wär nie was drauf gewesen - das war's aber definitiv.


    Liebe Grüße


    Fipsi

    Ich denk, die Daten auf der Karte sind verloren. die ursprünglichen Dateinamen hab ich natürlich nicht.


    Ja, ich wollte die Datenbankfiles retten, aber auch die zweite Partition scheint wohl n Schlag zu haben, auch wenn ich die mit dem Laufwerke-Programm nicht prüfen kann (Feld ist ausgegraut). Es sind da zwar einige Ordner vorhanden, aber die sind entweder leer oder haben zu 90 % irgendwas mit snap zu tun.

    Ich kann auch nicht mal auslesen, welches Filesystem die Partition hat.


    Na ja, nich so schlimm.. ging mir mehr um die DB-Strukturen als um deren Inhalt und die hab ich zum Glück in meinen PHP-Klassen auch hinterlegt.


    Vielen Dank trotzdem für eure Mühe.


    Liebe Grüße


    Fipsi

    __blackjack__ dass ich über window.*.setEndabled(True) geh sind doch die Signale? Oder wie meinst du das?


    Ja, die give_window hab ich kurz nach dem Posten hier wieder raus geschmissen. Hatte das mit der __init__ erst nicht hinbekommen und hab danach gespannt, dass ich's der Klasse und nicht der Methode übergeben hatte.


    Das ui hab ich noch mit übergeben, weil ich mir dachte, so ein wenig Schreibarbeit sparen zu können, aber wenn ich das in der Methode weggelassen hab, hat Python den Button nicht gefunden (versteh ich jetzt noch nicht, wieso).


    Das mit dem ui hatte ich so aus dem Tutorial übernommen. Um auch den letzten Punkt gleich aufzugreifen: Ich erzeuge das GUI mit Qt Creater und lass dann die *.ui in *.py übersetzen. Und die *.py selbst ruft ich dann mit meinem Programm auf - Tutorial.


    Ja, für dieses Beispiel wäre wahrscheinlich tatsächlich QTimer besser gewesen. Das war nur das einzige, was mir auf die schnelle eingefallen ist, womit ich testen kann, ob der Thread tatsächlich läuft. Später hab ich aber Tasks, die Zeitunabhängig laufen, da kann ich QTimer dann nicht mehr gebrauchen.


    Ich werd mir die zwei time-Methoden mal genauer anschauen, vielen Dank.


    Danke mal wieder für deine ausführliche Antwort, ich hoffe, meine Gedankengänge sind verständlich.


    Liebe Grüße


    Fipsi

    Ja, die QTcpSocket hab ich auch schon gesehen bei meiner Recherche gestern, die Doku dazu ist aber etwas... dürftig (oder ich bin nur mal wieder zu blöd, das richtige zu finden/den richtigen Link noch zu klicken).

    Deswegen schau ich jetzt mal erst mal mit meinen "normalen" Sockets und wenn ich das nicht hinbekomm, durchforsch ich noch mal weiter das Internet nach den QTcpSockets. Aber vielen Dank für den Hinweis.


    Liebe Grüße


    FIpsi

    Das einzige, was im "Datenträger 64 Mb" angezeigt wurde, war der Ordner "System Volume Information".

    Hab jetzt über das "Laufwerke"-Programm in Ubuntu die zwei Partitionen auf dem Laptop gesichert und dann die Boot-Partition über selbiges Programm repariert (ist übrigens ein FAT32-Filesystem).

    Jetzt sind in dem Laufwerk etliche "FSCK*" und "FSCK*.REC"-Dateien. Hab die SD-Karte wieder in den Pi gesteckt, aber er hat trotzdem nicht gebootet.

    -> SD-Karte noch mal in Laptop, Laufwerk überprüft = Laut Ubuntu nicht beschädigt.

    Bin jetzt noch mit

    Code
    sudo fsck.fat -v /dev/mmcblk0p1

    drüber, aber auch hier keine Veränderung - Pi bootet immer noch nicht.


    Was kann ich noch tun? Außer formatieren? :gk1:


    VIelen Dank und

    liebe Grüße


    Fipsi

    Okay, ersten Tests zufolge hab ich es jetzt wohl doch mit QThread hinbekommen:



    Zumindest ändert sich im 2 Sekunden Takt der Button schon mal.

    Jetzt mal schauen, ob ich das mit den Sockets und so auch hinbekomm. Ich halt auch auf dem laufenden.


    Vielen Dank für die Anstöße und

    liebe Grüße


    Fipsi

    Danke für deine Antwort Dennis.

    Ich hab mir zuerst deinen Link angeschaut, damit war dann aber für mich nicht allzu viel anzufangen, weshalb ich ich QtReacter gegooglet hab und auch damit kam ich nicht sehr weit.

    Ich bin dann über die Google-Suche auf QTimer, QThread, QRunnable und solche Sachen gestoßen, aber so wie ich das verstanden hab, sind auch die nicht für meinen Zweck geeignet: QTimer mach nur ne aktuell alle x Sekunden - kann ich nicht brauchen, und QThread und QRunnable können zwar andere Threads ausführen, aber immer nur durch Anstoß über die GUI? Das geht zwar in die richtige Richtung, aber ich bräuchte sozusagen einen weiteren Thread, der von selbst permanent läuft und mit der GUI kommuniziert.

    Hat da noch jemand einen Tipp für mich? Oder hab ich da nur was falsch verstanden?


    Liebe Grüße


    Fipsi

    Hallo zusammen,


    nachdem ich mit einer neuen SD-Karte meinen Pi wieder zum laufen gebracht hab, hab ich mich einem neuen Thema gewidmet, einem Python-Programm mit GUI via Qt.

    Bin da über ein Tutorial drauf gekommen, das aber nur kleine Programme als Beispiele hat, die nur über Buttons Funktionen ausführen.


    Das Programm, das ich vor hab, ist aber etwas komplexer:

    Es verbindet sich über TCP-Sockets mit einem Server und soll Aktionen aufgrund von GUI-Aktionen, als auch Befehlen über Sockets ausführen.

    Wie realisier ich sowas? GUI-Aktionen triggern Funktionen, da ist nichts dabei. Aber Sockets? Ich bräuchte ja eigentlich eine Schleife, die den Socket-Eingang immer wieder überprüft und dementsprechend abarbeitet. Aber nach kurzer Google-Suche darf man bei GUIs in Python keine while True-Schleifen verwenden?

    Wie kann ich das dann realisieren? Kann mir da mal jemand einen Tipp oder Pseudo-Code geben?


    Vielen Dank und

    liebe Grüße


    Fipsi

    Die boot-Partition hab ich eben erst gar nicht mehr gefunden und beim letzten Betrieb hab ich auch kein Update mehr gemacht, das weiß ich ganz sicher.

    Ich glaube, das war das original Raspberry-OS vor Buster-Zeiten.. hab den Pi 2017 oder 18 gekauft und von damals noch. Und ja, ich bin mir sicher, dass das die SD-Karte ist.

    Du kannst dann sehen wie weit gestartet wird und ob Fehlermeldungen ausgegeben werden. Auch die Logs ansehen kann direkt möglich sein. Das ist unabhängig von der GUI.

    Achso, okay, sorry.. ich dachte, ohne GUI wird der HDMI-Ausgang gar nicht angesteuert.


    Zeig uns doch mal was Du da siehst!

    Nein, das hast du falsch verstanden:
    Die SD-Karte bootet in keinem Raspberry Pi, der Pi, in dem die SD-Karte beim Gewitter war, funktioniert aber mit anderen SD-Karten.

    Wenn ich die SD-Karte, die nicht in den Pis bootet, am Laptop einstecke, kann ich aber im Dateibrowser rein schauten, nur die boot-Partition ist nicht da, ist mir eben noch aufgefallen.

    Hallo zusammen,


    ich steh gerade vor ein paar Fragezeichen:


    Im August hatte ich einen Raspberry Pi 3 im AUßeneinsatz, der möglicherweise auch von einem Gewitterchen (oder eher: Weltuntergang) was abbekommen haben könnte.

    Seitdem lag der Pi in einer Ecke und eben hab ich ihn wieder hervorgekramt und wollte an einem Projekt weiter arbeiten.

    Wieder an Strom angesteckt, rote LED geht an, sonst rührt sich nichts. Hängt auch mit LAN-Kabel über Switch am Router, aber: nix tut sich. Im Router geschaut: wird auch nicht als Gerät im Netzwerk angezeigt.

    Also SD-Karte am Laptop eingesteckt, geht sofort auf (Ubuntu) und kann die Dateien durchklicken. Da ist nicht viel zu finden, und sind auch nur ein paar 100 MB (RaspiOS ohne GUI), von einem User-Ordner mit Daten aber keine Spur.

    Also die SD-Karte wieder ausgeworfen und in einem Pi 4 eingesteckt und gestartet: Pi leuchtet rot und blinkt manchmal grün, Netzwerk-Dose blinkt auch, aber trotzdem nicht über SSH erreichbar und wird auch nicht im Rounter in der Netzwerkübersicht angezeigt.

    Nächster Versuch: SD-Karte aus dem Pi 4 in den Pi 3 gesteckt: Läuft alles einwandfrei.


    Meinte Vermutung ist jetzt also, dass die SD-Karte ne Make hat. Aber warum seh ich dann Ordner und Dateien am Laptop? Sollte das nicht eher a la "ganz oder gar nicht" sein? Kann ich da noch irgendwie Daten retten? Da ist eine Datenbank drauf, von der ich kein Backup hab (ja, ich weiß, kein Backup, kein Mitleid), aber irgendwie schaut mir der Inhalt der SD seltsam aus.. seh da nur n Haufen Ordner "*snap*" und sonst nichts, was groß Sinn ergibt..


    Liebe Grüße eines leicht irritierten :conf::conf:


    FIpsi

    __blackjack__ Okay, ich glaube, hättest du aufgezählt, was ich richtig gemacht hab, wäre dein Beitrag wesentlich kürzer geworden :stumm::stumm:


    Vielen Dank für deine Korrektur und ausführlichen Erklärungen, ich werd das mal versuchen zu verinnerlichen.


    Liebe Grüße


    Fipsi

    Na dann berichte mal, wenn es Fortschritt bei deinem Projekt gibt. :thumbup:

    So, ich weiß, das hat jetzt ein paar Monate gedauert, ich weiß und tut mir leid, es hatte sich bisher nicht rentiert, dass ich jetzt grad was bastel.

    Da ich jetzt in einer neuen Wohnung mit etwas besserer technischer Ausstattung bin, hab ich jetzt folgendes Script gebastel:



    Sobald mein Touchdisplay da ist, werd ich anfangen, eine Webseite und/oder ein Python-Script zur Steuerung des bisherigen Scripts schreiben.


    Liebe Grüße


    Fipsi