Tkinter 使用条件语句更改标签属性

Tkinter change a label attribute with a conditonal statement

我有一个颜色列表,这些颜色通过索引编号分配给不同的标签。我有一个 for 循环和一个 if 语句来检查是否有任何颜色是黑色的。如果颜色是 'black' 我希望 for 循环将该标签的 'fg' 属性更改为白色。我可以正确设置变量 'label_name' 的格式,但无法将其识别为标签,因此我可以更改属性。

注意:实际代码中的颜色是变化的变量

注意:据我所知,您可以交替使用十六进制代码“#FFFFFF”或 'white'

color_list = ['red','blue', 'green', 'black']
counter = 0
for item in color_list:
    counter += 1
    if item.find("black"):
        label_name = "header{}".format(counter)
        print(label_name)
# this line is where I can't get passed
        label_name['fg'] = 'white'
header1 = Label(root, bg=color_list[0])
header2 = Label(root, bg=color_list[1])
header3 = Label(root, bg=color_list[2])
header4 = Label(root, bg=color_list[3])

header1.grid(row=1, column=0)
header2.grid(row=1, column=1)
header3.grid(row=2, column=0)
header4.grid(row=2, column=1)

我尝试使用 .config 同样的问题:

label_name.config(fg = 'white')

我也试过将所有标签文本更改为白色:

font_color = '#000000'
for item in color_list:
    if item.find('#000000'):
        font_color = '#FFFFFF'
    else: pass
header1 = Label(root, bg=color_list[0], fg=font_color)

第一个问题是您试图修改字符串的属性,label_name,它不是 tkinter 小部件。即使这确实有效,您尝试在创建小部件之前更改文本颜色,因此您的 for 循环需要在您制作小部件之后进行。
您仍然需要一种方法来获取对 tkinter 小部件的引用以更改它们的前景,因此您也可以使用它来检查背景。要获取 root 的 children 的列表,您可以使用 root.winfo_children()。然后您可以遍历此列表并使用 cget 获取每个小部件的背景颜色。如果它等于黑色,您可以使用 .config 将前景设置为白色(item['fg'] = 'white' 也可以)。
如果根 window 中还有其他小部件,您不' 想改变前景,将 root.winfo_children() 替换为 (header1, header2, header3, header4)。那么只有 headers 会受到影响。这是更新后的代码:

color_list = ['red','blue', 'green', 'black']

header1 = Label(root, bg=color_list[0])
header2 = Label(root, bg=color_list[1])
header3 = Label(root, bg=color_list[2])
header4 = Label(root, bg=color_list[3])

for item in root.winfo_children():
    if item.cget("bg") == 'black':
        item.config(fg = 'white')

header1.grid(row=1, column=0)
header2.grid(row=1, column=1)
header3.grid(row=2, column=0)
header4.grid(row=2, column=1)