如果我使用参数tkinter.Label
而不是fg = PRIMARY_COLOR
创建.pack()
,如果我更改PRIMARY_COLOR
变量的值,请调用.update()
方法小部件,前景色不会改变。我知道,为什么会发生这种情况,但我能以某种方式做到,小部件会改变PRIMARY_COLOR
变量的前景颜色吗?我可以制作某种"指针"?
答案 0 :(得分:1)
不,你不能做你想做的事。您需要调用使用该颜色的每个窗口小部件的configure
方法。
答案 1 :(得分:1)
正如布莱恩所说,你不能完全你想要什么,但你可以接近。
下面的代码使用StringVar的.trace
方法在StringVar发生更改时更改Label颜色。它使用一个Entry来改变StringVar,但你没有有来使用Entry:只要StringVar被设置为一个新值,回调就会改变“hello”标签的配置。您可以输入标准颜色名称,如“红色”或十六进制代码,如“#ff8800”。
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text='hello')
label.pack()
# A StringVar that changes the Label color whenever its value is changed
label_color = tk.StringVar()
label_color.trace("w", lambda *args: label.config(fg=label_color.get()))
# An Entry where we can specify the new color
tk.Label(root, text='Enter a color name or hex number').pack()
e = tk.Entry(root)
e.pack()
# Set the StringVar to the string that the user just entered
def set_colorstring(evt):
s = evt.widget.get()
if s:
label_color.set(s)
e.bind("<Return>", set_colorstring)
root.mainloop()
你可能使用这种技术来更改多个小部件的配置,但你必须明确地做(例如循环回调中的小部件列表)。不幸的是,您不能只将fg
属性设为StringVar并让它自动更新颜色。