如果我创建一个带有参数tkinter.Label
的fg = PRIMARY_COLOR
而不是它的.pack()
,如果更改PRIMARY_COLOR
变量的值,则调用小部件的.update()
方法,前景色不会改变。我知道为什么会发生这种情况,但是我能以某种方式做为,该小部件将通过PRIMARY_COLOR
变量更改来更改前景色?我可以做某种“指针”吗?
最佳答案
正如Bryan所说,您不能完全按照自己的意愿去做,但是可以结识。
下面的代码使用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并使其自动更新颜色。