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.

Imágenes personalizadas de Tkinter

Estoy intentando crear un botón de retroceso. Tengo una imagen llamada back-button.png en la carpeta img.

Este es mi código:

from tkinter import *
import customtkinter as ctk

root = Tk()

ctk.CTkLabel(root, 
  text='This is a label', 
  text_font=('Verdana', 17)).pack(side=LEFT, pady=11)

img = PhotoImage(file="./img/back-button.png")
ctk.CTkButton(root, image=img).pack(side=LEFT)

root.mainloop()

Cuando ejecuto este código, obtengo este error:

Traceback (most recent call last):
  File "c:\Users\User\Desktop\youtube-audio-downloader\tempCodeRunnerFile.py", line 11, in <module>
    ctk.CTkButton(root, image=img).pack(side=LEFT)
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\customtkinter\customtkinter_button.py", line 102, in __init__
    self.draw()
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\customtkinter\customtkinter_button.py", line 147, in draw
    self.canvas.configure(bg=CTkColorManager.single_color(self.bgcolor, self.appearance_mode))
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1646, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1636, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown color name "."

Entonces, ¿por qué está sucediendo esto? ¿Y cómo puedo mostrar una imagen en un botón?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error está ocurriendo porque la biblioteca CustomTkinter está intentando establecer el color de fondo del botón como “.” que no es un nombre de color válido. Para mostrar una imagen en un botón utilizando CustomTkinter, debe establecer la opción image en lugar de la opción bg_color. Aquí está el código modificado:

    from tkinter import *
    import customtkinter as ctk
    
    root = Tk()
    
    ctk.CTkLabel(root,
      text='Esto es una etiqueta',
      text_font=('Verdana', 17)).pack(side=LEFT, pady=11)
    
    img = PhotoImage(file="./img/back-button.png")
    ctk.CTkButton(root, image=img).pack(side=LEFT)
    
    root.mainloop()
    

    Esto debería mostrar la imagen en el botón sin errores. Ten en cuenta que debes mantener una referencia al objeto PhotoImage para evitar que sea eliminado por el recolector de basura.

Comments are closed.