Foros Python

Versión completa: Mostrar imagen en etiqueta (Label) (tkinter)
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buen día,me presento soy Javier y es el primer foro en el que participo, por eso les pido un poco de paciencia si cometo algún error, al hacer alguna pregunta..también soy nuevo en  esto de programar con python3, bien me gustaría saber si alguien me podría  decir como mejorar un sencillo programa que hice en python 3 usando la librería tkinter, es un botón que genera imágenes aleatorias, funciona    ,pero me lanza un warning... si alguno sabe como hacerlo mejor y que no salga este error, le agradecería que me lo dijera gracias..

Código:
from tkinter import *
import random
from PIL import ImageTk,Image
ventana = Tk()

def aleatorio():
    carga=""
    carga2=""
    carga3=""
    lista=[1,2,3]
    X=random.choice(lista)

    if X==1:


        imagen = Image.open("car1.png").resize((70, 70), Image.ANTIALIAS)
        miimagen = ImageTk.PhotoImage(imagen)
        carga = Label(ventana, image=miimagen)
        carga.grid(row=10, column=0)
        print(carga3(image=miimagen))

    elif X==2:

        imagen2 = Image.open("negro.png").resize((70, 70), Image.ANTIALIAS)
        miimagen2 = ImageTk.PhotoImage(imagen2)
        carga2 = Label(ventana, image=miimagen2)
        carga2.grid(row=10, column=0)
        print(carga3(image=miimagen2))


    elif X==3:
        imagen3 = Image.open("horse1.png").resize((70, 70), Image.ANTIALIAS)
        miimagen3 = ImageTk.PhotoImage(imagen3)
        carga3 = Label(ventana, image=miimagen3 )
        carga3.grid(row=10, column=0)
        print(carga3(image=miimagen3))


miframe=Frame(ventana)
miframe.config(widt=400,height=500)
botonale= Button(ventana,text="Genera", command=lambda :aleatorio())
botonale.grid(row=120,columnspan=2)
ventana.mainloop()
Hola, bienvenido.

Te edité el título para que sea más específico y moví el tema a la sección de Aplicaciones de escritorio. En cuanto al error, el problema está en esta línea (y las otras dos similares):

Código:
print(carga3(image=miimagen))

¿Qué se supone que debería hacer ese código? carga3 es una cadena, pero la estás llamando como si fuera una función.

Otra cosa que se podría mejorar es esto:

Código:
carga = Label(ventana, image=miimagen)
carga.grid(row=10, column=0)

No es conveniente crear una nueva etiqueta cada vez que el usuario presiona el botón. Te conviene crear una sola etiqueta fuera de la función (la misma para cualquiera de las tres imágenes) y luego simplemente cambiarle la imagen dentro del botón usando carga["image"] = miimagen.

Saludos
(25-07-2022, 05:19 PM)Francisco escribió: [ -> ]Hola, bienvenido.

Te edité el título para que sea más específico y moví el tema a la sección de Aplicaciones de escritorio. En cuanto al error, el problema está en esta línea (y las otras dos similares):

Código:
print(carga3(image=miimagen))

¿Qué se supone que debería hacer ese código? carga3 es una cadena, pero la estás llamando como si fuera una función.

Otra cosa que se podría mejorar es esto:

Código:
carga = Label(ventana, image=miimagen)
carga.grid(row=10, column=0)

No es conveniente crear una nueva etiqueta cada vez que el usuario presiona el botón. Te conviene crear una sola etiqueta fuera de la función (la misma para cualquiera de las tres imágenes) y luego simplemente cambiarle la imagen dentro del botón usando carga["image"] = miimagen.

Saludos

muchas gracias francisco por tu tiempo....te lo agradesco mucho.