考虑以下代码:
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
奇怪的是,如果我将语句var.get()放入按钮的回调函数中,则将显示的值var。
var.get()
这是由Python中的某种局部变量优化引起的错误吗?我该怎么做才能确保textvariable总是在条目中出现的值?
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()