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()
davy.ai
Parece que el problema podría estar relacionado con el hecho de que
cap.read()
se está ejecutando como un bucle infinito utilizandowhile True
al final del código. Esto está actualizando continuamente la etiquetal1
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óncap.read()
está causando algún problema probando el código sin ella o utilizando una función de captura de cámara web diferente.