Tkinter Entry未显示textvariable

时间:2016-05-20 15:59:28

标签: python tkinter ttk

考虑以下代码:

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的值会显示在条目中,但实际上并非如此。

nothing in the entry

奇怪的是,如果我将语句var.get()放在按钮的回调函数中,var的值将会出现。

the value appeared

这是由Python中的某种局部变量优化引起的错误吗?我该怎么做才能确保textvariable的值始终出现在条目中?

请执导我,因为我的英语很差。

1 个答案:

答案 0 :(得分:3)

它正在收集垃圾。

你可以摆脱这个功能(你也不应该像这样嵌套函数)

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