Seite 1 von 1
Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Dienstag 30. Juni 2020, 22:37
von leo10
Hallo,
ich habe jetzt mein Programm fertig und wollte es jetzt als .exe mit dem PyInstaller über auto-py-to-exe umwandeln und abspeichern.
Dabei hat alles gut funktioniert, allerdings fehlt bei der .exe Datei das Icon des Fensters bei der Ausführung, welches ich über
dem Fenster zugewiesen habe.
Bei der .py Datei wurde dieses immer angezeigt, jedoch nicht mehr in der umgewandelten .exe.
Ich habe natürlich die Datei unter Additional Files in auto-py-to-exe einzeln hinzugefügt.
Was muss ich machen, damit das Icon angezeigt wird?
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Dienstag 30. Juni 2020, 23:26
von __blackjack__
@leo10: Die Pfadangabe ist ja relativ zum aktuellen Arbeitsverzeichnis des Prozesses. Das wird nicht dort sein, wo die *.py-Datei dann liegt. Keine Ahnung ob `__file__` in dem Modul dann richtig gesetzt ist. So würde man das ohne Umwandlung in eine EXE machen, sich mit `pathlib.Path` und `__file__` den entsprechenden Pfad zusammenbauen.
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Mittwoch 1. Juli 2020, 08:21
von leo10
Die *.ico Datei habe ich aktuell im selben Verzeichnis wie die *.py Datei.
Wenn ich aber einen genauen Pfad angebe, dann würde es ja nicht mehr funktionieren, wenn ich die *.exe Datei auf einem anderen Computer verwenden würde.
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Mittwoch 1. Juli 2020, 10:33
von __blackjack__
@leo10: Darum ja über den Wert von `__file__`. Das sollte immer der Dateiname/Pfad sein unter dem das Modul erreichbar ist. Da den Dateinamen vom Modul entfernen und durch den Namen der Icon-Datei ersetzen und man hat den Pfad zu dem Icon das im gleichen Verzeichnis liegt. Die `with_name()`-Methode von `Path`-Objekten ist da hilfreich.
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Mittwoch 1. Juli 2020, 21:29
von leo10
Ich kenne die Path-Objekte und die genannten Methoden nicht.
Gibt es dazu ausführliche Erklärungen auf einer Webseite oder so?
Ich finde selber leider keine sinnvolle Erklärungen dazu.
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Mittwoch 1. Juli 2020, 22:33
von Sirius3
Erklärungen gibt es immer in der Dokumentation:
https://docs.python.org/3/library/pathl ... #basic-use
Code: Alles auswählen
from pathlib import Path
Path(__file__).with_name(''PDF_Icon.ico'')
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Donnerstag 2. Juli 2020, 07:50
von leo10
Danke.
Muss ich dann einfach die zweite Zeile einer Variable zu ordnen und diese in die .setWindowIcon()-Methode setzen?
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Donnerstag 2. Juli 2020, 11:06
von Sirius3
Ja, am besten als Konstante am Anfang des Moduls:
Code: Alles auswählen
from pathlib import Path
ICON_FILENAME = Path(__file__).with_name("PDF_Icon.ico")
...
window.setWindowIcon(ICON_FILENAME)
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Donnerstag 2. Juli 2020, 12:29
von leo10
Danke für die gute Erklärung.
In der *.py Datei hat die Implementierung gut funktioniert; man muss nur den Typ der Variable als String setzen, sonst gibt es einen TypeError.
Allerdings wird das Icon dennoch nach dem Umwandeln in eine *.exe Datei nicht angezeigt.
Vielleicht wird die *.ico Datei anders abgespeichert in der *.exe Datei, also in einem extra Verzeichnis.
Kann das sein?
Ich habe jetzt mal die Datei auch mit Konsole konvertiert. Dabei wurde das Icon bei der Konsole angezeigt aber nicht im eigentlichen Fenster. Es kam auch kein Fehler, also muss die *.ico Datei im richtigen Verzeichnis sein.
Wenn ich die *.py als OneDirectory statt OneFile bei auto-py-to-exe in eine *.exe konvertiere, so funktioniert es.
Aber so hab ich ja ein einen Ordner mit Dateien statt eine Datei.
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Donnerstag 2. Juli 2020, 13:32
von leo10
Ich habe jetzt mal die *.ico Datei in den gleichen Ordner wie meine umgewandelte *.exe Datei. Dann wird das Icon auch angezeigt.
Kann man das auch kompakter lösen?
Re: Icon in .exe-Datei wird nicht im Fenster angezeigt.
Verfasst: Donnerstag 2. Juli 2020, 13:49
von leo10
Meine Lösung:
Ich habe eine neue *.py erstellt(Window_Icon.py):
Code: Alles auswählen
from pathlib import Path
def pdfIcon():
pdf = str(Path(__file__).with_name("PDF_Icon.ico"))
return pdf
Sagt einfach nichts über die Namen...
Und habe dann in der Fenster Datei mich darauf bezogen:
Code: Alles auswählen
PDF_Icon_File = Window_Icon.pdfIcon()
Dialog.setWindowIcon(QtGui.QIcon(PDF_Icon_File))
So funktioniert es.