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.

Problema de PhotoImage en Tkinter: el botón no funciona y no se muestra.

Estoy usando Proxlight Designer para crear una interfaz gráfica de arrastrar y soltar. Es una aplicación que funciona con open-cv-python, pero un Botón no se muestra. Parece que open-cv es el problema, porque si lo eliminas, el Botón se muestra y funciona correctamente. Aquí tienes el código para la interfaz gráfica:

cap = cv2.VideoCapture(0)

window = Tk()
window.geometry("700x800")
window.configure(bg="#ffffff")
canvas = Canvas(
    window,
    bg="#ffffff",
    height=800,
    width=700,
    bd=0,
    highlightthickness=0,
    relief="ridge")
canvas.place(x=0, y=0)

l1 = Label(bg="black")
l1.place(x=100, y=150, width=500, height=500)

img0 = PhotoImage(file=f"RES/img1.png")
b0 = Button(
    image=img0,
    borderwidth=0,
    highlightthickness=0,
    command=save_face,
    relief="flat")

b0.place(
    x=250, y=693,
    width=200,
    height=75)

img1 = PhotoImage(file=f"RES/img2.png")

b1 = Button(
    image=img1,
    borderwidth=0,
    highlightthickness=0,
    command=encryptPass,
    relief="flat")

b1.place(
    x=480, y=693,
    width=200,
    height=75)

img2 = PhotoImage(file=f"RES/img3.png")
b2 = Button(
    image=img2,
    borderwidth=0,
    highlightthickness=0,
    command=generate_key,
    relief="flat")

b2.place(
    x=20, y=693,
    width=200,
    height=75)

window.resizable(False, False)

while True:
    img = cap.read()[1]
    img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = ImageTk.PhotoImage(Image.fromarray(img1))
    l1["image"] = img
    window.update()
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con el hecho de que cap.read() se está ejecutando como un bucle infinito utilizando while True al final del código. Esto está actualizando continuamente la etiqueta l1 con la nueva imagen de la cámara web, lo que potencialmente hace que la imagen del botón no se muestre correctamente.

    Para resolver este problema, recomendaría agregar una condición de interrupción dentro del bucle while True para que el bucle infinito pueda ser terminado a voluntad. Además, puede valer la pena comprobar si la función cap.read() está causando algún problema probando el código sin ella o utilizando una función de captura de cámara web diferente.

Comments are closed.