Tkinter: Radiobutton forground color saat dipilih

Aug 19 2020

Saya telah Radiobuttonmenampilkan tampilan tombol cekung yang ingin saya miliki:

  • teks hitam dengan latar belakang putih jika tidak dipilih,
  • teks putih dengan latar belakang abu-abu tua saat dipilih.

Saat ini saya hanya memiliki latar belakang abu-abu tetapi tidak ada teks putih saat dipilih, yang membuat kontrasnya buruk.

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.Radiobuttonmemiliki opsi untuk dikonfigurasi selectcolor, yaitu warna latar belakang saat dipilih, tetapi tampaknya tidak menawarkan opsi seperti itu untuk warna latar depan saat dipilih.

Saya berpikir bahwa satu mungkin mencapai ini dengan menentukan commanddipicu pada seleksi yang akan rb.configyang foregroundpada radiobutton yang yang dipilih, tetapi ini akan memerlukan mengakses eksternal sifat-sifat tombol radio sendiri, bukan hanya nilai variabel yang mereka tetapkan, yang saya temukan sejauh ini tidak ada cara untuk melakukannya.

Bagaimana cara mendapatkan opsi di sepanjang garis selectforeground?

Jawaban

1 Atlas435 Aug 19 2020 at 16:08

Gunakan fungsi anonim untuk ini:

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