Проблема с Tkinter с использованием StringVar(), trace() и Entry()

Я определяю 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? Пожалуйста, предоставьте минимальный воспроизводимый пример.

martineau 24.12.2020 19:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код работает нормально для меня, если я добавлю какой-нибудь шаблон.

Судя по имени переменной «forgottenWindow», я предполагаю, что это новое окно в вашей программе. Проблема, которую вы видите, может возникнуть, если вы используете Tk() для создания дополнительных окон. Всегда используйте Toplevel, чтобы создавать новые окна после первого.

forgottenWindow = Toplevel()

Спасибо, кажется, сработало. Это может быть потому, что я использую темпераментную IDE в браузере.

Jack Redhead 26.12.2020 12:01

Другие вопросы по теме