Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用“更新tkinter小部件参数”;指针;_Python_Pointers_Variables_Tkinter_Parameters - Fatal编程技术网

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()