Tkinter 条目不显示 textvariable 的当前值
Tkinter Entry not showing the current value of textvariable
考虑这段代码:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
def sub():
var=StringVar(value='default value')
def f(): pass
Entry(tk,textvariable=var).pack()
Button(tk,text='OK',command=f).pack()
sub()
mainloop()
我们期望 var
的值出现在条目中,但实际上它没有。
奇怪的是,如果我把语句var.get()
放在按钮的回调函数中,var
的值就会出现。
这是 Python 中某种局部变量优化导致的错误吗?我该怎么做才能确保 textvariable
的值始终出现在条目中?
请原谅我糟糕的英语。
正在收集垃圾。
你可以去掉这个函数(你也不应该像这样嵌套函数)
from tkinter import *
from tkinter.ttk import *
tk=Tk()
var=StringVar(value="default value")
Entry(tk, textvariable=var).pack()
Button(tk,text='OK').pack()
mainloop()
或者,如果您想保留该功能.. 将 stringvar 设置为 tk 的属性或将其设为全局。
使其全球化:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
var = StringVar(value="Default value")
def sub():
Entry(tk, textvariable=var).pack()
Button(tk,text='OK').pack()
sub()
mainloop()
作为 tk 的属性:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
def sub():
tk.var = StringVar(value="Default value")
Entry(tk, textvariable=tk.var).pack()
Button(tk,text='OK').pack()
sub()
mainloop()
考虑这段代码:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
def sub():
var=StringVar(value='default value')
def f(): pass
Entry(tk,textvariable=var).pack()
Button(tk,text='OK',command=f).pack()
sub()
mainloop()
我们期望 var
的值出现在条目中,但实际上它没有。
奇怪的是,如果我把语句var.get()
放在按钮的回调函数中,var
的值就会出现。
这是 Python 中某种局部变量优化导致的错误吗?我该怎么做才能确保 textvariable
的值始终出现在条目中?
请原谅我糟糕的英语。
正在收集垃圾。
你可以去掉这个函数(你也不应该像这样嵌套函数)
from tkinter import *
from tkinter.ttk import *
tk=Tk()
var=StringVar(value="default value")
Entry(tk, textvariable=var).pack()
Button(tk,text='OK').pack()
mainloop()
或者,如果您想保留该功能.. 将 stringvar 设置为 tk 的属性或将其设为全局。
使其全球化:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
var = StringVar(value="Default value")
def sub():
Entry(tk, textvariable=var).pack()
Button(tk,text='OK').pack()
sub()
mainloop()
作为 tk 的属性:
from tkinter import *
from tkinter.ttk import *
tk=Tk()
def sub():
tk.var = StringVar(value="Default value")
Entry(tk, textvariable=tk.var).pack()
Button(tk,text='OK').pack()
sub()
mainloop()