是否可以仅对一个框架的内容使用 .tk_setPalette()?
我有一个根框架,里面有好几个子框架,每个子框架都有标签。
- 我先为根框架设置了前景色和背景色,
- 然后我想为一个特定的子框架里的所有子元素设置不同的前景色和背景色。
但是我没有成功,只能改变一个子框架的颜色,结果所有子框架的颜色都跟着变了。
下面的代码是一个示例。
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")