Python importieren von bilder für pyinstaller

Gast #4492841
Lesenswert?

Hi,

ich möchte aus einem Python script eine ausführbare Datei für Windows 
machen. Also eine exe Datei.

Soweit geht das auch, aber wenn ich mit tkinter ein Bild einbinde läuft 
die exe nicht mehr!
1
photo=PhotoImage(file='mail.png')

Die exe wird so erstellt
1
pyinstaller.py --noconsole  D:\python\test.py -F

Wenn ich die neu erstellte exe ausführe bekomme ich folgenden Fehler 
angezeigt.
1
test returned -1

Weiss jemand zufällig wie ich das Problem lösen kann?
Gast #4492874
Lesenswert?

ich würde mal in das Verzeichnis wechseln, in der deine py liegt.
Ich kann mir noch vorstellen, dass die Angabe des Bilds innerhalb der 
py-Datei absolut ist. Wenn du deine exe aus einem anderen Verzeichnis 
erstellst, findet er dieses absolute Bild nicht. Also davor
cd D:\python\
und dannach halt die exe ohne ganzen Pfad erstellen.
Persönliche Seite #4494964
Lesenswert?

Hallo Jochen.

Jochen schrieb:
> Ohne dem Bild in der test.py geht das ohne Probleme mit dem Befehl

Ich kenne mich weder mit Python unter Windows noch dem Pythoninstaller 
aus.

Aber ich habe trozdem den Verdacht, dass es

A) daran liegt, dass Du auf eine Datei zugreifst, die ausserhalb des 
Skriptes liegt.

B) Ausserdem kann photoimage nativ nur GIF und PGM/PPM Formate. Ob PNG 
so ohne weiteres in PGM/PPM subsumierbar ist, weiss ich nun auch nicht, 
aber anscheinend scheint es ja bei Dir ohne den Pythoninstaller zu 
funktionieren.

Möglicherweise ist aber dort noch etwas zwischengeschaltet, das der 
Pythoninstaller nicht verarbeiten kann.

zu A)
In Python gibt es die Möglichkeit, die Bilder base64 gewandelt direkt in 
den Code einzufügen ("inline").
zu base64: https://de.wikipedia.org/wiki/Base64
Es gibt für Python3 ein eigenes base64 modul:
https://docs.python.org/3/library/base64.html
Das kannst Du zum Wandeln schon verwenden. In Deinem Falle aber nicht im 
code, sondern manuell in der Konsole, und das Gewandelte dann in den 
Code einbringen.


Zu B)
Wandle das Bild halt in GIF um, und verwende dieses. Auch GIF lässt sich 
dann noch base64 wandeln.


Beispiel mit Python3: 
https://www.mikrocontroller.net/wikifiles/f/f6/PyKiCad-CaseSensitiveLibCure_RevD_13Apr2015.zip 
Die Buttonbilder für die Sprachumschaltung sind dort so eingebunden.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Gast #4496444
Lesenswert?

Hi,

ich versuche gerade die ersten versuche mit base64, muss ich mir für 
Python3 base64 erst installieren?
1
import base64
2

3
original_string = 'This is the data, in the clear.'
4
print ('Original:', original_string)
5

6
encoded_string = base64.b16encode(original_string)
7
print ('Encoded :', encoded_string)
8

9
decoded_string = base64.b16decode(encoded_string)
10
print ('Decoded :', decoded_string)

1
Original: This is the data, in the clear.
2
Traceback (most recent call last):
3
  File "D:\python\base64.py", line 1, in <module>
4
    import base64
5
  File "D:\python\base64.py", line 6, in <module>
6
    encoded_string = base64.b16encode(original_string)
7
AttributeError: 'module' object has no attribute 'b16encode'
Persönliche Seite #4496844
Lesenswert?

Hallo jochen.

Jochen schrieb:

> ich versuche gerade die ersten versuche mit base64, muss ich mir für
> Python3 base64 erst installieren?

Zumindest in Debian Jessy nicht.

Das sollte so funktionieren wie im Screenshot 
"Python3_Base64-Encoding_06Mar2016.png" im Anhang.


>
1
> Original: This is the data, in the clear.
2
> Traceback (most recent call last):
3
>   File "D:\python\base64.py", line 1, in <module>
4
>     import base64
5
>   File "D:\python\base64.py", line 6, in <module>
6
>     encoded_string = base64.b16encode(original_string)
7
> AttributeError: 'module' object has no attribute 'b16encode'
8
>

Da läuft irgendwas mit dem Namen oder/und mit der Art der Daten krum.

Siehe:
https://docs.python.org/3/library/base64.html
und
http://stackoverflow.com/questions/8908287/base64-encoding-in-python-3

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Angehängte Dateien:
(Firma: RUB) #4496863
Lesenswert?

Jochen schrieb:
> muss ich mir für
> Python3 base64 erst installieren?
Nein, das gehört zu den standard Python Modulen. Müsstest du es erst 
installieren, dann würde das ganze schon beim import scheitern.

Die encode() funktion möchte ein Byte-Objekt haben, kein String.

Also:
1
original_string = b'This is the data, in the clear.'
statt:
1
original_string = 'This is the data, in the clear.'
Gast #4497128
Lesenswert?

Habe es nochmal eine neue Python Datei erstellt. Nun geht es...


Bisher habe ich das Bild so eingebunden


photo=PhotoImage(file='mail.gif')


Jetzt habe ich das Bild encodet. Wie kann ich das nun wieder als Bild 
anzeigen lassen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren