Tkinter: цвет радиокнопки при выборе

Aug 19 2020

Я Radiobuttonпоказал утопленную кнопку, которую я хотел бы иметь:

  • черный текст на белом фоне, когда он не выбран,
  • белый текст на темно-сером фоне при выборе.

В настоящее время у меня только серый фон, но нет белого текста при выборе, что снижает контраст.

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.Radiobuttonимеет возможность настройки selectcolor, которая является цветом фона при выборе, но, похоже, не предлагает такой опции для цвета переднего плана при выборе.

Я подумал , что можно было бы достичь этого, задав commandсрабатывают на выборе , который будет на этой радиокнопке , который выбран, но это потребует доступ извне свойства радиокнопок себя, а не только значения переменных они установили, что я нашел пока нет возможности сделать.rb.configforeground

Как мне получить вариант по линиям selectforeground?

Ответы

1 Atlas435 Aug 19 2020 at 16:08

Используйте для этого анонимную функцию :

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()