使用 StringVar()、trace() 和 Entry() 的 Tkinter 问题
Problem with Tkinter using StringVar(), trace() and Entry()
我正在定义一个 StringVar()
并给它一个值,然后将其用作 Entry
小部件的 textvariable
。我还向 StringVar
添加了跟踪,以便我可以将其用作占位符检查器,并使占位符的颜色与键入的文本不同。
然而,当我 运行 输入小部件的代码不包含文本时,但是如果我打印 StringVar()
的值,它会给出正确的值。此外,永远不会调用跟踪命令,当我打印 Entry
小部件的 textvariable
的值时,它显示为 PY_VAR#
.
有谁知道为什么这不起作用以及如何解决它?
circleVarEmailAddress = StringVar()
circleVarEmailAddress.set("email address")
circletextEmailAddress = Entry(forgottenWindow, textvariable = circleVarEmailAddress,
font = 10, relief = "raised", highlightbackground = "black",
borderwidth = 2, fg = "#808080")
circletextEmailAddress.place(x = 75, y = 100, width = 250, height = 50)
def placeholderEmailAddress(a, b, c):
print("Hey")
for i in range(1, 13):
if("email address"[:i] in circleVarEmailAddress.get() == True and
"email address"[i:] in circleVarEmailAddress.get() == True):
index1 = circleVarEmailAddress.get().index("email address"[:i])
index2 = circleVarEmailAddress.get().index("email address"[i:])
circleVarEmailAddress.set(circleVarEmailAddress.get()[:index1] +
circleVarEmailAddress.get()[index1 + i:index2] +
circleVarEmailAddress.get()[index2 + 13 - i:])
if(circleVarEmailAddress.get() != "email address" and
"email address" in circleVarEmailAddress.get() == True):
circleVarEmailAddress.set(circleVarEmailAddress.get().replace("email address", ""))
if circleVarEmailAddress.get() == "":
circleVarEmailAddress.set("email address")
if circleVarEmailAddress.get() == "email address":
circletextEmailAddress.config(fg = "#808080")
else:
circletextEmailAddress.config(fg = "#000000")
circleVarEmailAddress.trace_add("write", placeholderEmailAddress)
如果我添加一些样板,你的代码对我来说运行良好。
我根据变量名“forgottenWindow”假设这是您程序中的新 window。如果您使用 Tk()
进行附加 windows,就会出现您看到的问题。始终使用 Toplevel
创造超越第一个的新 windows。
forgottenWindow = Toplevel()
我正在定义一个 StringVar()
并给它一个值,然后将其用作 Entry
小部件的 textvariable
。我还向 StringVar
添加了跟踪,以便我可以将其用作占位符检查器,并使占位符的颜色与键入的文本不同。
然而,当我 运行 输入小部件的代码不包含文本时,但是如果我打印 StringVar()
的值,它会给出正确的值。此外,永远不会调用跟踪命令,当我打印 Entry
小部件的 textvariable
的值时,它显示为 PY_VAR#
.
有谁知道为什么这不起作用以及如何解决它?
circleVarEmailAddress = StringVar()
circleVarEmailAddress.set("email address")
circletextEmailAddress = Entry(forgottenWindow, textvariable = circleVarEmailAddress,
font = 10, relief = "raised", highlightbackground = "black",
borderwidth = 2, fg = "#808080")
circletextEmailAddress.place(x = 75, y = 100, width = 250, height = 50)
def placeholderEmailAddress(a, b, c):
print("Hey")
for i in range(1, 13):
if("email address"[:i] in circleVarEmailAddress.get() == True and
"email address"[i:] in circleVarEmailAddress.get() == True):
index1 = circleVarEmailAddress.get().index("email address"[:i])
index2 = circleVarEmailAddress.get().index("email address"[i:])
circleVarEmailAddress.set(circleVarEmailAddress.get()[:index1] +
circleVarEmailAddress.get()[index1 + i:index2] +
circleVarEmailAddress.get()[index2 + 13 - i:])
if(circleVarEmailAddress.get() != "email address" and
"email address" in circleVarEmailAddress.get() == True):
circleVarEmailAddress.set(circleVarEmailAddress.get().replace("email address", ""))
if circleVarEmailAddress.get() == "":
circleVarEmailAddress.set("email address")
if circleVarEmailAddress.get() == "email address":
circletextEmailAddress.config(fg = "#808080")
else:
circletextEmailAddress.config(fg = "#000000")
circleVarEmailAddress.trace_add("write", placeholderEmailAddress)
如果我添加一些样板,你的代码对我来说运行良好。
我根据变量名“forgottenWindow”假设这是您程序中的新 window。如果您使用 Tk()
进行附加 windows,就会出现您看到的问题。始终使用 Toplevel
创造超越第一个的新 windows。
forgottenWindow = Toplevel()