Tkinter条目未显示textvariable的当前值

发布于 2021-01-29 15:03:57

考虑以下代码:

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总是在条目中出现的值?

请为我的英语不好而处决我。

关注者
0
被浏览
75
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它正在收集垃圾。

    您可以删除函数(也不应像这样嵌套函数)

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看