考虑以下代码:
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的值将为apear.
这是由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()
标签:python,tkinter,ttk
来源: https://codeday.me/bug/20191002/1845425.html