设置 tkinter 条目默认值
Set tkinter Entry default value
我正在开发一个脚本,它将在阅读 python 脚本后自动构建 GUI。我在让我构建的 Entry 对象接受默认值时遇到问题。
我向我的方法传递了一个包含默认值和变量名称的字典 (arg)。
def create_entry(self,
arg):
if 'default' in arg.keys():
var = StringVar(value=arg['default'])
else:
var = StringVar()
box = ttk.Entry(self.mainframe, textvariable=var)
box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E))
label= ttk.Label(self.mainframe, text=arg['name']).grid(column=0, row=self.num, sticky=E)
return box, label
我无法解释的是,查找目录的类似方法工作正常....
def create_askdirectory(self,
arg):
if 'default' in arg.keys():
var = StringVar(value=arg['default'])
else:
var = StringVar()
box = ttk.Entry(self.mainframe, textvariable=var)
box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E))
def askdirectory():
dirname = filedialog.askdirectory()
if dirname:
var.set(dirname)
button = ttk.Button(self.mainframe, text='directory', command=askdirectory).grid(column=0, row=self.num)
return box, button
ttk 小部件比 tkinter 小部件对垃圾收集更敏感。您的变量(您实际上不需要)是局部变量,因此它们正在被垃圾收集。
它在其他代码中起作用的原因是 askdirectory
函数在 create_askdirectory
函数内部,因此它能够看到局部变量。
我的建议是不要使用StringVar
——在这种情况下它们是完全没有必要的。
box = ttk.Entry(self.mainframe)
box.insert(0, arg.get("default", ""))
我正在开发一个脚本,它将在阅读 python 脚本后自动构建 GUI。我在让我构建的 Entry 对象接受默认值时遇到问题。
我向我的方法传递了一个包含默认值和变量名称的字典 (arg)。
def create_entry(self,
arg):
if 'default' in arg.keys():
var = StringVar(value=arg['default'])
else:
var = StringVar()
box = ttk.Entry(self.mainframe, textvariable=var)
box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E))
label= ttk.Label(self.mainframe, text=arg['name']).grid(column=0, row=self.num, sticky=E)
return box, label
我无法解释的是,查找目录的类似方法工作正常....
def create_askdirectory(self,
arg):
if 'default' in arg.keys():
var = StringVar(value=arg['default'])
else:
var = StringVar()
box = ttk.Entry(self.mainframe, textvariable=var)
box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E))
def askdirectory():
dirname = filedialog.askdirectory()
if dirname:
var.set(dirname)
button = ttk.Button(self.mainframe, text='directory', command=askdirectory).grid(column=0, row=self.num)
return box, button
ttk 小部件比 tkinter 小部件对垃圾收集更敏感。您的变量(您实际上不需要)是局部变量,因此它们正在被垃圾收集。
它在其他代码中起作用的原因是 askdirectory
函数在 create_askdirectory
函数内部,因此它能够看到局部变量。
我的建议是不要使用StringVar
——在这种情况下它们是完全没有必要的。
box = ttk.Entry(self.mainframe)
box.insert(0, arg.get("default", ""))