La entrada Tkinter no muestra el valor actual de la variable de texto

Considere este código:

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() 

Esperamos que el valor de var aparezca en la entrada, pero en realidad no es así.

nada en la entrada

Lo extraño es que si pongo la statement var.get() en la función de callback del botón, aparecerá el valor de var .

el valor apareció

¿Es un error causado por algún tipo de optimización de variables locales en Python? ¿Y qué puedo hacer para asegurarme de que el valor de la textvariable de textvariable siempre aparecerá en la entrada?

Por favor, perdóname por mi pobre inglés.

Se está recogiendo la basura.

Simplemente puedes deshacerte de la función (tampoco deberías anidar funciones como esta)

 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() 

O, si desea mantener la función … establezca la cadena de caracteres como un atributo de tk o hágala global.

Haciéndolo global:

 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() 

Como atributo de 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()