Я определяю StringVar()
и присваиваю ему значение, а затем использую его как textvariable
виджета Entry
. Я также добавил трассировку к StringVar
, чтобы использовать ее в качестве средства проверки заполнителя и сделать заполнитель другим цветом для печатного текста.
Однако, когда я запускаю код, виджет ввода не содержит текста, но если я печатаю значение StringVar()
, оно дает правильное значение. Кроме того, команда трассировки никогда не вызывается, и когда я печатаю значение textvariable
виджета Entry
, оно отображается как 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», я предполагаю, что это новое окно в вашей программе. Проблема, которую вы видите, может возникнуть, если вы используете Tk()
для создания дополнительных окон. Всегда используйте Toplevel
, чтобы создавать новые окна после первого.
forgottenWindow = Toplevel()
Спасибо, кажется, сработало. Это может быть потому, что я использую темпераментную IDE в браузере.
Что такое
forgottenWindow
? Пожалуйста, предоставьте минимальный воспроизводимый пример.