Tkinter: Radiobutton forground color เมื่อเลือก

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.configเป็นforegroundบนปุ่มเรดิโอที่เลือก แต่จะต้องมีการเข้าถึงคุณสมบัติของปุ่มตัวเลือกจากภายนอกด้วยตัวเองแทนที่จะเป็นเพียงค่าของตัวแปรที่ตั้งไว้ซึ่งฉันพบ ไม่มีทางทำได้

ฉันจะได้รับตัวเลือกตามแนวของ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()