es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código que deben corregirse:

    1. En loadfileclass(), filenamevar debe inicializarse con una cadena vacía ('') en lugar de tk.StringVar().
    2. El parámetro command en tk.Button debe establecerse en loadfileclass().fun en lugar de loadfileclass para llamar al método fun().

    3. tk.Label debe ser creado con la ventana principal win como padre.

    4. fd[0] debe establecerse como el texto de la etiqueta en lugar del padre de la etiqueta.

    5. Las líneas de data.replace() y data.split() deben moverse fuera del método fun() ya que se necesitan para inicializar la variable data.

    Aquí está el código corregido:

    import tkinter as tk
    
    win = tk.Tk()
    
    class loadfileclass():
        filenamevar = ''
        data = ''
    
        def fun(self):
            global photo, data
            data = data.replace("##########","\n")
            fd = data.split("==========")
            photo = tk.PhotoImage(file=fd[1])
            tk.Label(win, text=fd[0]).pack()
            tk.Label(win, image=photo).pack()
    
        try:
            filenamevar = ''
            fname = filenamevar.get()
            filenamevar.set("")
            mainfile = open(str(fname), "rb")
            data = mainfile.read()
            data = data.decode()
            data = data.split("##########")
        except:
            pass
    
    tk.Label(win, text='Filename: ').pack()
    tk.Entry(win, textvariable=loadfileclass.filenamevar).pack()
    tk.Button(win, text='Load', command=loadfileclass().fun).pack()
    
    win.mainloop()
    

    Tenga en cuenta que agregué un parámetro self al método fun() para acceder a la variable data. Además, añadí un método decode() a la variable data después de leerla del archivo para convertirla de bytes a una cadena. Por último, moví la inicialización de filenamevar fuera del bloque try ya que siempre debe inicializarse independientemente de si se encuentra el archivo o no.

Comments are closed.