【问题标题】:Problem with Tkinter using StringVar(), trace() and Entry()Tkinter 使用 StringVar()、trace() 和 Entry() 的问题
【发布时间】:2020-12-24 18:10:27
【问题描述】:

我正在定义一个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)

【问题讨论】:

标签: python tkinter trace tkinter-entry


【解决方案1】:

如果我添加一些样板,您的代码对我来说运行良好。

我从变量名“forgottenWindow”假设这是您程序中的一个新窗口。如果您使用Tk() 制作额外的窗口,您看到的问题可能会发生。始终使用Toplevel 来创建第一个窗口之外的新窗口。

forgottenWindow = Toplevel()

【讨论】:

  • 谢谢,这似乎奏效了。这可能是因为我正在使用一个喜怒无常的浏览器内 IDE。
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多