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)
我有一个颜色列表,这些颜色通过索引编号分配给不同的标签。我有一个 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)