Tkinter: Radiobutton pour la couleur du fond lorsqu'il est sélectionné

Aug 19 2020

J'ai Radiobuttonaffiché un aspect de bouton enfoncé que je voudrais avoir:

  • texte noir sur fond blanc lorsqu'il n'est pas sélectionné,
  • texte blanc sur fond gris foncé lorsqu'il est sélectionné.

Actuellement, je n'ai qu'un fond gris mais pas de texte blanc lorsqu'il est sélectionné, ce qui crée un contraste médiocre.

for (lbl, val) in [("A", "a"), ("B", "b"))]:
    rb = tk.Radiobutton(tab,
                        text=lbl,
                        variable=v,
                        value=val,
                        command=select,
                        selectcolor=gray,
                        indicatoron=0,
                        width=25, pady=7.5)
    rb.pack(...)

tk.Radiobuttona une option à configurer selectcolor, qui est la couleur d'arrière-plan lorsqu'elle est sélectionnée, mais elle ne semble offrir aucune option de ce type pour la couleur de premier plan lorsqu'elle est sélectionnée.

Je pensais que l'on pourrait y parvenir en spécifiant un commanddéclencheur sur la sélection qui sera rb.configle foregroundsur ce bouton radio qui est sélectionné, mais cela nécessiterait d'accéder en externe aux propriétés des boutons radio eux-mêmes, plutôt que simplement la valeur de la variable qu'ils définissent, que j'ai trouvée pas moyen de faire jusqu'ici.

Comment puis-je obtenir une option du type de selectforeground?

Réponses

1 Atlas435 Aug 19 2020 at 16:08

Utilisez une fonction anonyme pour cela:

import tkinter as tk

def select(rb):
    rb.config(foreground='white')
    for rb_ in rbs:
        if rb_ != rb:
           rb_.config(fg='black')

root = tk.Tk()

rbs=[]

def do_buttons():
    for _ in range(11):
        v=tk.IntVar()
        val = 1

        rb = tk.Radiobutton(root,
                            text="A",
                            variable=v,
                            value=val,
                            selectcolor='gray',
                            indicatoron=0,
                            width=25, pady=7.5)
        rb.config(command=lambda arg=rb:select(arg))

        rb.pack()
        rbs.append(rb)

b = tk.Button(root, text='click', command=do_buttons)
b.pack()

root.mainloop()