【问题标题】:String Variable not setting initial value字符串变量未设置初始值
【发布时间】:2020-02-29 18:26:52
【问题描述】:
class Lay():
  def __init__(self):
    root=Tk()
    root.configure(background="black")
    var=StringVar()
    var.set("OVERVIEW")
    Label(root,textvariable=var).grid(row=1,column=1,sticky=W+E+N+S)
    Entry(root, textvariable = var).place(rely=1.0,relx=1.0,x=0,y=0,anchor=SE)
    root.mainloop() 

你好,当我运行这个时,字符串变量的初始值没有出现,但是当我在输入框中输入时,我输入的文本出现在标签中。我不太确定为什么会发生这种情况,但我得到一个空标签,带有输入框。感谢您的任何帮助。

【问题讨论】:

  • 我无法重现您的第一个问题 - 我的设备上的标签和条目文本已更改。您的第二个问题是因为您使用的是相同的StringVar,因此更新Entry 中的var 会更新您的Label 中的var...
  • 这显然不是您的完整代码 - 没有任何东西会调用 Lay(),因此不会发生任何事情。您的实际代码中的其他内容可能会导致问题 - 我怀疑这是对 Tk() 的另一个调用,这往往会导致 Vars 出现问题(以及许多其他问题)。如果您想要多个窗口,则必须在第一个窗口之后使用Toplevel() 而不是所有窗口。
  • @jasonharper 是的,问题是对 Tk() 的另一个调用,我以为我已经处理过了,我没有发布其余代码,因为我不想向所有人发送垃圾代码并告诉你修复它。非常感谢您的帮助!

标签: python tkinter tkinter-entry


【解决方案1】:

虽然我无法重现该问题,但我重构了您的代码以通过一个类初始化 tkinter 小部件(受docs 中的 sn-p 启发),并且还增加了窗口大小以便清楚地查看小部件.如果您的代码中有任何其他内容按照@jasonharper 的建议调用多个窗口,您应该分享它。

import tkinter as tk

class Lay(tk.Tk):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master        
        self.var=tk.StringVar()
        self.var.set("OVERVIEW")        
        self.Widgets()   


    def Widgets(self):        
        self.displaylbl = tk.Label(self,textvariable=self.var)
        self.displaylbl.grid(row=2,column=1,sticky=tk.W+tk.E+tk.N+tk.S)        
        self.entry = tk.Entry(self, textvariable = self.var)
        self.entry.place(rely=1.0,relx=1.0,x=0,y=0,anchor=tk.SE)


app = Lay()
app.geometry("200x200")
app.mainloop()

输出:

【讨论】:

  • 问题正如 jasonharper 所建议的那样。也感谢您重构我的代码,我不知道您可以像这样使用带有 tkinter 的类。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2017-08-03
  • 2017-06-14
相关资源
最近更新 更多