【问题标题】:Tkinter Entry not showing the current value of textvariableTkinter 条目未显示 textvariable 的当前值
【发布时间】:2018-11-10 17:49:00
【问题描述】:

考虑这段代码:

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

请原谅我英语不好。

【问题讨论】:

  • 这个问题有一个解决方案,但你可能想考虑使用StringVar;他们很少需要。您可以通过小部件本身的方法获取和设置值。

标签: python tkinter ttk


【解决方案1】:

它正在收集垃圾。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多