El argumento background no funciona en un botón TKinter.

Resuelto
Veyten -  
Veyten Mensajes publicados 6 Estado Miembro -
Hola,

Soy principiante en Python. He codificado un script con
tkinter
, pero tengo un botón que no funciona:

generate_button = Button(right_frame, text="Generar", font=("Arial", 20), bg='#68F004', fg='white', relief=SUNKEN, bd=0, highlightthickness=0, command=generate_passwd)


Aunque he configurado
bg='#68F004'
, obtengo un fondo gris y no verde.

¿Cómo puedo cambiar el color de fondo si este argumento no funciona, y por qué no funciona?

Gracias de antemano,

Veyten.

6 respuestas

  1. Veyten Mensajes publicados 6 Estado Miembro 2
     
    ¡Gracias a todos por ayudarme!

    Finalmente, fue yg_be quien encontró la respuesta, que se puede consultar aquí:
    https://stackoverflow.com/questions/1529847/how-to-change-the-foreground-or-background-colour-of-a-tkinter-button-on-mac-os

    En MacOS, los botones se gestionan de manera diferente. Tkinter no puede modificar el color de fondo del botón por esta razón. Afortunadamente, hay un módulo, tkmacosx, que se debe importar además de Tkinter. Deja los comandos de Tkinter, pero corregidos para MacOS. Por lo tanto, me permite cambiar el bg y le da un aspecto un poco más "mac" al botón.

    El resultado con Tkmacosx asociado a Tkinter es el siguiente:



    Gracias a todos/as los/as que han dado un poco de su tiempo para intentar ayudarme, es reconfortante ver que aún hay un poco de solidaridad en este mundo de locos.

    Veyten
    2
  2. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     
    Hola,

    Raro, en mi casa funciona:

    Tal vez con el código completo, lo veríamos más claro...
    0
    1. Veyten
       
      Hola,

      El código completo es:

      import string from random import randint, choice from tkinter import * def generate_passwd(): passwd_min = 6 passwd_max = 18 all_chars = string.ascii_letters + string.punctuation + string.digits password = "".join(choice(all_chars)for x in range(randint(passwd_min, passwd_max))) password_entry.delete(0, END) password_entry.insert(0, password) window = Tk() window.title("Generador de contraseñas") window.geometry() window.minsize(720, 480) window.iconbitmap('logo.png') window.config(background='#5EFBDC') frame = Frame(window, bg='#5EFBDC') # agregar imagen width = 300 height = 300 image = PhotoImage(file="logo.png").zoom(50).subsample(60) canvas = Canvas(frame, width=width, height=height, bg='#5EFBDC', bd=0, highlightthickness=0) canvas.create_image(width/2, height/2, image=image) canvas.grid(row=0, column=0, sticky=W) right_frame = Frame(frame, bg='#5EFBDC') label_title = Label(right_frame, text="Contraseña", font=("Helvetica", 20), bg='#5EFBDC', fg='white') label_title.pack() # crear un campo/input password_entry = Entry(right_frame, font=("Helvetica", 20), bg='#5EFBDC', fg='white') password_entry.pack() # crear un botón generate_button = Button( right_frame, text="Generar", font=("Arial", 20), bg='#68F004', fg='#68F004', relief=SUNKEN, bd=0, highlightthickness=0, command=generate_passwd ) # curiosamente, el argumento 'bg=' no tiene efecto y el fondo sigue siendo gris cuando debería ser verde. generate_button.pack(pady=10, fill=X) right_frame.grid(row=0, column=1, sticky=W) frame.pack(expand=YES) # crear barra de menú menu_bar = Menu(window) file_menu = Menu(menu_bar, tearoff=0) file_menu.add_command(label="Nuevo", command=generate_passwd) file_menu.add_command(label="Salir", command=window.quit) menu_bar.add_cascade(label="Archivo", menu=file_menu) window.config(menu=menu_bar) window.mainloop() 


      Sé que no está correctamente distribuido en funciones, pero no me parece que eso afecte a la ejecución de mi programa.

      Gracias,

      Veyten
      0
      1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Veyten
         
        hola, también funciona en mi casa, el botón está todo verde (como pusiste el texto en verde también).
        Estoy usando Thonny.
        0
      2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        quizás deberíamos probar con tu archivo logo.png?
        0
  3. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     
    En mi casa, funciona, lo único es que como fg = bg, verde sobre verde, no se ve el texto del botón
    0
  4. Veyten
     
    bg = fg porque trataba de poner bg en #68F004, pero como seguía siendo gris, también puse fg en #68F004 porque este era blanco y por lo tanto era ilegible en blanco sobre gris claro.
    Voy a intentar actualizar Tkinter y ver si eso resuelve el problema.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Y eso cómo se vería en tu caso con fg también en #68F004?
      0
    2. Veyten Mensajes publicados 6 Estado Miembro 2 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      eso daba esto:

      0
    3. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Veyten Mensajes publicados 6 Estado Miembro
       
      Entonces, con los dos especificados en verde claro, ¿el fondo era blanco?
      0
    4. Veyten Mensajes publicados 6 Estado Miembro 2 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      eso es, sí.
      0
    5. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Veyten Mensajes publicados 6 Estado Miembro
       
      Veo aquí varias sugerencias de soluciones o alternativas.
      1
  5. Veyten
     
    Estoy en MacOS, tal vez la forma en que maneja las ventanas no sea compatible.
    Voy a probar en un Linux.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Es un Mac con colores? Mi último era en blanco y negro (y gris)...
      0
      1. Veyten > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        Evidentemente. Los Macs han tenido colores desde hace tiempo y son incluso más modernos que Windows 11 en términos gráficos.

        https://www.apple.com/es/newsroom/2021/06/macos-monterey-introduces-powerful-features-to-get-more-done/
        0
  6. Veyten
     
    Parece que en Linux, mi programa funciona perfectamente. El botón tiene ese color verde. Puede que sea una incompatibilidad con la gestión de botones en MacOS.
    0