Ich schreibe ein tkinter-Programm, das einige JPG-Dateien für seinen Hintergrund verwendet. Ich habe jedoch festgestellt, dass die Bilder, die für tkinter-Fenster verwendet werden, nicht zur EXE-Datei kompiliert/hinzugefügt werden, wenn das Skript mit "pyinstaller" in eine EXE-Datei konvertiert wird.Wie verwende ich die base64-codierte Bildzeichenfolge in Tkinter label?
Daher habe ich beschlossen, das Bild im Python-Skript fest zu codieren, so dass es keine externe Abhängigkeit gibt. Zu diesem Zweck habe ich die folgenden Dinge getan:
import base64
base64_encodedString= ''' b'hAnNH65gHSJ ......(continues...) '''
datas= base64.b64decode(base64_encodedString)
Der obige Code wird zum Dekodieren der Basis 64 codierten Bilddaten verwendet. Ich möchte diese decodierten Bilddaten als Bild verwenden und als Label/Button im tkinter anzeigen.
Zum Beispiel:
from tkinter import *
root=Tk()
l=Label(root,image=image=PhotoImage(data=datas)).pack()
root.mainloop()
ist jedoch tkinter nicht den Wert in data
gespeichert zu akzeptieren als ein Bild verwendet werden. Es zeigt die folgenden Fehler -
Traceback (most recent call last):
File "test.py", line 23, in <module>
l=Label(root,image=PhotoImage(data=datas))
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 3394, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 3350, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize image data
Verwenden Sie Python2 oder Python3? Nach dieser [Frage] (http://stackoverflow.com/questions/27175029/tkinter-will-not-recognize-image-data-in-base64-encoded-string) scheint es mit Python3 möglich zu sein. –
@ j_4321 Ich benutze Python 3. Ich habe diese Frage überprüft und es scheint mein Problem nicht zu lösen. –
Also haben Sie den Code in der [Frage] (http://stackoverflow.com/questions/27175029/tkinter-will-not-recognize-image-data-in-base64-encoded-string) versucht? –