【问题标题】:Tkinter change a label attribute with a conditonal statementTkinter 使用条件语句更改标签属性
【发布时间】:2021-08-18 03:11:40
【问题描述】:

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

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

注意:据我了解,您可以交替使用十六进制代码“#FFFFFF”或“白色”

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 是字符串吗?
  • 注意tkinterheader1生成的内部名称不是"header1"。您可以使用Label()name 选项指定内部名称,然后使用root.nametowidget() 获取具有给定名称的小部件的引用。另请注意,在使用 name 选项时,您应该确保名称是唯一的。

标签: python tkinter attributes label counter


【解决方案1】:

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

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)

【讨论】:

  • 感谢工作。我确实必须使用十六进制代码作为颜色。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
相关资源
最近更新 更多