Tkinter no muestra la imagen en la etiqueta
Este es mi código:
import tkinter as tk
win=tk.Tk()
class loadfileclass():
filenamevar=''
data=''
try:
filenamevar=tk.StringVar()
fname=filenamevar.get()
filenamevar.set('')
mainfile=open(str(fname),"rb")
data=mainfile.read()
data=data.split("##########")
except:
pass
tk.Label(text='Nombre de archivo: ').pack()
tk.Entry(textvariable=loadfileclass.filenamevar).pack()
tk.Button(text='Cargar',command=loadfileclass).pack()
data=loadfileclass.data
for i in data:
def fun():
global photo,data
data.replace("##########","\n")
fd=data.split("==========")
photo=Tkinter.PhotoImage(file=fd[1])
tk.Label(fd[0],image=photo).pack()
fun()
win.mainloop()
La etiqueta no se mostrará, ni siquiera la imagen o el texto.
Ok, aquí está el contenido del archivo cuyo nombre escribí en la entrada:
IMAGEN
h1```
(he abierto la imagen en el bloc de notas y la he copiado y pegado aquí)
h6#
h1IMAGEN
(he abierto la imagen en el bloc de notas y la he copiado y pegado aquí nuevamente)
h6#
¿Cómo puedo solucionarlo?
davy.ai
Hay algunos problemas con el código que deben corregirse:
loadfileclass()
,filenamevar
debe inicializarse con una cadena vacía (''
) en lugar detk.StringVar()
.El parámetro
command
entk.Button
debe establecerse enloadfileclass().fun
en lugar deloadfileclass
para llamar al métodofun()
.tk.Label
debe ser creado con la ventana principalwin
como padre.fd[0]
debe establecerse como el texto de la etiqueta en lugar del padre de la etiqueta.Las líneas de
data.replace()
ydata.split()
deben moverse fuera del métodofun()
ya que se necesitan para inicializar la variabledata
.Aquí está el código corregido:
Tenga en cuenta que agregué un parámetro
self
al métodofun()
para acceder a la variabledata
. Además, añadí un métododecode()
a la variabledata
después de leerla del archivo para convertirla de bytes a una cadena. Por último, moví la inicialización defilenamevar
fuera del bloquetry
ya que siempre debe inicializarse independientemente de si se encuentra el archivo o no.