是否可以仅对一个框架的内容使用 .tk_setPalette()?

1 投票
1 回答
1103 浏览
提问于 2025-04-18 13:18

我有一个根框架,里面有好几个子框架,每个子框架都有标签。

  1. 我先为根框架设置了前景色和背景色,
  2. 然后我想为一个特定的子框架里的所有子元素设置不同的前景色和背景色。

但是我没有成功,只能改变一个子框架的颜色,结果所有子框架的颜色都跟着变了。

下面的代码是一个示例。

import Tkinter as tk

class MyApp():
    def __init__(self):
        self.root = tk.Tk()
        # this frame content will be modified
        self.frame = tk.Frame(self.root)
        self.frame.grid(row=0, column=0)
        self.a = tk.Label(self.frame, text="hello world", font=("Arial", 100))
        self.a.grid(row=0, column=0)
        # this frame content will not change
        self.frame2 = tk.Frame(self.root)
        self.frame2.grid(row=1, column=0)
        self.a2 = tk.Label(self.frame2, text="bazinga", font=("Arial", 100))
        self.a2.grid(row=0, column=0)
        self.root.bind('q', self.toggle)

    def toggle(self, event):
        # go through all children (= Labels) of the first frame
        for children in self.frame.children.values():
            children.tk_setPalette(background="black", foreground="blue")
            children.configure()

app = MyApp()
app.root.mainloop()

在调用时,颜色没有设置:

这里插入图片描述

当我按下q键时,我本来希望只改变self.frame里的标签颜色,但结果并不是这样:

这里插入图片描述

我该怎么做才能只更新一个特定子框架里的子元素颜色呢?

1 个回答

2

你不应该使用 tk_setPalette 这个方法来做这个事情。相反,你应该使用 configure 方法

children.configure(background="black", foreground="blue")

另外,如果你想的话,上面的代码可以写得更简洁一些:

children.config(bg="black", fg="blue")

撰写回答