Tkinter: Seçildiğinde zemin rengi için Radiobutton

Aug 19 2020

Sahip olmak Radiobuttonistediğim batık düğme görünümünü görüntüledim:

  • seçilmediğinde beyaz zemin üzerine siyah metin,
  • koyu gri arka plan üzerinde beyaz metin seçildiğinde.

Şu anda yalnızca gri arka plana sahibim, ancak seçildiğinde beyaz metin yok, bu da zayıf kontrast sağlıyor.

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.Radiobuttonselectcolorseçildiğinde arka plan rengi olan yapılandırma seçeneğine sahiptir , ancak seçildiğinde ön plan rengi için böyle bir seçenek sunmuyor gibi görünüyor.

Ben birinin belirterek bunu başarmak düşündüm commandedecek seçime tetiklenen bu radiobutton seçildiğinde, ama bu oldukça buldum onlar set değişkenin sadece değerinden daha dışarıdan kendilerini radyo düğmelerinin özelliklerine erişim gerektirecektir şimdiye kadar yapmanın yolu yok.rb.configforeground

Çizgisinde bir seçeneği nasıl elde ederim selectforeground?

Yanıtlar

1 Atlas435 Aug 19 2020 at 16:08

Bunun için anonim bir işlev kullanın :

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