Python 使用“更新tkinter小部件参数”;指针;
如果我用参数Python 使用“更新tkinter小部件参数”;指针;,python,pointers,variables,tkinter,parameters,Python,Pointers,Variables,Tkinter,Parameters,如果我用参数fg=PRIMARY\u COLOR创建一个tkinter.Label而不是.pack()它,如果我更改PRIMARY\u COLOR变量的值,调用小部件的.update()方法,前景颜色不会改变。我知道,为什么会发生这种情况,但我能做些什么,小部件会随着PRIMARY\u color变量的改变而改变前景色吗?我能做点“指针”吗?不,你不能做你想做的事。您需要调用每个使用该颜色的小部件的configure方法。正如Bryan所说,您不能完全做您想要做的,但您可以接近它 下面的代码使用
fg=PRIMARY\u COLOR
创建一个tkinter.Label
而不是.pack()
它,如果我更改PRIMARY\u COLOR
变量的值,调用小部件的.update()
方法,前景颜色不会改变。我知道,为什么会发生这种情况,但我能做些什么,小部件会随着PRIMARY\u color
变量的改变而改变前景色吗?我能做点“指针”吗?不,你不能做你想做的事。您需要调用每个使用该颜色的小部件的configure
方法。正如Bryan所说,您不能完全做您想要做的,但您可以接近它
下面的代码使用StringVar的.trace
方法在StringVar发生更改时更改标签颜色。它使用一个条目来更改StringVar,但您不必使用该条目:每当StringVar设置为新值时,回调将更改“hello”标签的配置。您可以输入标准颜色名称,如“红色”,或十六进制代码,如“ff8800”
将tkinter作为tk导入
root=tk.tk()
label=tk.label(根,text='hello')
label.pack()
#一个StringVar,每当其值更改时都会更改标签颜色
label_color=tk.StringVar()
label\u color.trace(“w”,lambda*args:label.config(fg=label\u color.get())
#可以指定新颜色的条目
标签(root,text='输入颜色名称或十六进制数').pack()
e=传统条目(根)
e、 包()
#将StringVar设置为用户刚刚输入的字符串
def set_颜色字符串(evt):
s=evt.widget.get()
如果是:
标签颜色设置
e、 绑定(“,set\u colorstring)
root.mainloop()
您可以使用此技术来更改多个小部件的配置,但必须显式地进行更改(例如在回调中循环小部件列表)。不幸的是,您不能只将fg
属性设置为StringVar并让它自动更新颜色
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()