Python-如何从tkinter小部件获取值并将其分配给变量

7
from tkinter import *
import tkinter as tk
import pyodbc

root1 = tk.Tk()

label1 = tk.Label(root1, text='product A')
entry1 = tk.Entry(root1)

label1.pack(side = tk.TOP)
entry1.pack()
input1= StringVar()
input1.set(entry1.get())
print (input1)

这段代码用于将输入文本框控件的值分配给一个名为 Input1 的变量。然而,我得到的值是:PY_VAR0,而不是 Entry1 中的文本。

我需要打印输入文本。为什么会出现 PY_VAR0?

请帮忙解决。

谢谢。

3个回答

8
问题在于你在用户输入之前获取了entry小部件的值,因此它将始终为空字符串。
如果你等待用户输入后再执行get操作,那么你的代码就能正常工作。虽然我不明白为什么要使用StringVar,因为它只是增加了一个没有实际用途的额外对象。除非你需要StringVar提供的额外功能(即变量跟踪),否则没有理由在entry小部件中使用StringVar。
你看到PY_VAR0的原因是因为你必须使用get方法从StringVar实例中获取值。将你的语句更改为print input1.get()。

3
要获取 StringVar 的内容,请调用 get():
input1.get()

此外,您应该将StringVar绑定到Entry,否则StringVar不会随着Entry小部件的内容更改而改变。
entry1.config(textvariable=input1) 

或者您可以在构造时绑定:

input1 = StringVar()
entry1 = tk.Entry(root1, textvariable=input1)

2

如果您想打印Tkinter变量的值,必须使用.get()方法来检索它,例如:

print(input1.get())

否则,您正在访问变量的名称,这就是您所看到的。
当您拥有StringVar(或其他类似的Tkinter变量)时,可以通过将其转换为字符串来获取变量的名称,例如:
my_string_variable_name = str(input1)

如果在创建变量时没有设置变量名,以下是获取变量名的最简单方法。可以按照以下方式设置变量名:

sv = tkinter.StringVar(name='Fred', value='Flintstone') # Note you can set a value, too!

那么

print(str(sv)) # which is what is happening when you say print(sv)

输出 'Fred',并且

print(sv.get())

打印出“Flintstone”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接