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。これは、選択したときの背景色ですが、選択したときの前景色にはそのようなオプションがないようです。

私は1つが指定することでこれを実現するかもしれないと思った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()