Hallo zusammen,
ich habe ein GUI Fenster für diverse Berechnungen und möchte ganz klassisch über F1 eine PDF öffnen, mit Erklärungen, so als Hilfe-Funktion. Ich bin nicht in der Lage die PDF-Datei so zu starten, dass die GUI nicht einfriert.
os.System
subprocess.call mit diversen Parameter
threading.Thread(target=os.system(pdfpath), args=(1,)).start()
irgendwie stehe ich auf dem Schlauch, warum das nicht funktioniert? Muss ich meine GUI dafür komplett umbauen? Ich muss doch irgendwie ein Befehl ausführen können, auf den nicht gewartet wird?
Gruß Tobias
PDF öffnen, ohne das GUI einfriert
Wie immer hilft es, den Pythoncode zu sehen, und nicht nur Fragmente.
os.system sollte man nicht mehr verwenden.
target erwartet eine Funktion, und nicht den Exitcode vom os.system-Aufruf. Das args-Argument ist auch nicht sehr sinnoll, warum 1?
Damit der Prozess wieder sauber aufgeräumt wird, ist es am einfachsten, Threads zu benutzen.
os.system sollte man nicht mehr verwenden.
target erwartet eine Funktion, und nicht den Exitcode vom os.system-Aufruf. Das args-Argument ist auch nicht sehr sinnoll, warum 1?
Damit der Prozess wieder sauber aufgeräumt wird, ist es am einfachsten, Threads zu benutzen.
Code: Alles auswählen
threading.Thread(target=subprocess.call, args=(["start", pdfpath],), daemon=True).start()
Sorry, ich viele unterschiedliche Zeilen versucht, aber immer wieder gelöscht. Ich dachte, dass die Beschreibung und die Fragmente ausreichend wären.
Wenn ich nicht irre oder sonst was falsch gemacht habe, muss doch shell=True noch rein?
so geht es auf jeden Fall. Vielen Dank!
Wenn ich nicht irre oder sonst was falsch gemacht habe, muss doch shell=True noch rein?
Code: Alles auswählen
threading.Thread(target=subprocess.call(["start", r"..pfad.pdf"], shell=True), daemon=True).start()
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das Problem ist was immer Du als `target` da hin schreibst: das muss eine Funktion sein, oder was aufrubares, was `Thread` dann mit dem `start()`-Aufruf in einem eigenen Thread startet. Du rufst das aber schon selbst auf bevor das `Thread`-Objekt überhaupt erst erstellt ist. Dann blockiert das natürlich solange bis es fertig ist die GUI wenn Du das gar nicht in einem eigenen Thread startest.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman