如何使用PY_VAR0或PY_VAR1获取Entry值?

3 投票
1 回答
3640 浏览
提问于 2025-04-18 08:14

我有一段简单的代码,如下所示:

from tkinter import *



def _show_value(*pargs):
    print(*pargs)



root = Tk()

entry_var1 = StringVar()
entry_var1.trace('w', _show_value)

entry_var2 = StringVar()
entry_var2.trace('w', _show_value)


e1 = Entry(root, textvariable=entry_var1)
e1.pack()

e2 = Entry(root, textvariable=entry_var2)
e2.pack()      


root.mainloop()

我想实时打印e1和e2的内容,每次它们被写入时。但是我得到的不是文本,而是:

PY_VAR0  w
PY_VAR0  w
PY_VAR1  w
PY_VAR1  w

我该如何根据PY_VAR0获取e1的文本,当PY_VAR1出现时获取e2的文本?这是不是entry_var1和entry_var2的一些内部名称?我该如何使用PY_VAR0和PY_VAR1来引用entry_var1和entry_var2?

1 个回答

3

你可以用两种方法来实现这个功能。

第一种,使用你主窗口的 globalgetvar 方法。

def _show_value(*pargs):
    print(*pargs)
    print(root.globalgetvar(pargs[0]))

这样可以获取到相应输入框里的文本。

第二种,更推荐的方法是将 StringVar 的引用传递给 _show_value,比如可以使用 lambdas,而不是使用 Tk 的全局变量:

from tkinter import *



def _show_value(v, *pargs):
    print(*pargs)
    print(v.get())



root = Tk()

entry_var1 = StringVar()
entry_var1.trace('w', lambda *pargs: _show_value(entry_var1, *pargs))

entry_var2 = StringVar()
entry_var2.trace('w', lambda *pargs: _show_value(entry_var2, *pargs))


e1 = Entry(root, textvariable=entry_var1)
e1.pack()

e2 = Entry(root, textvariable=entry_var2)
e2.pack()      


root.mainloop()

撰写回答