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?
请帮助。
谢谢。
问题是,在用户有机会键入任何内容之前,您已经获得了条目小部件的值,因此它始终是空字符串。
如果您等到用户输入内容后再进行获取,您的代码将保持原样。不过,我看不出使用StringVar
的任何理由,因为它只是添加了一个没有实际用途的对象。除非您需要StringVar
为您带来的额外功能(即变量跟踪),否则没有理由将StringVar
与条目小部件一起使用。
您看到PY_VAR0
的原因是因为必须使用get
方法才能从StringVar
的实例中获取值。将您的对帐单更改为print input1.get()
。
获取StringVar
调用get()
的内容:
input1.get()
此外,您应该将StringVar
绑定到Entry
,否则StringVar
不会随Entry
小部件的内容而改变:
entry1.config(textvariable=input1)
或者您可以在构造时绑定:
input1 = StringVar()
entry1 = tk.Entry(root1, textvariable=input1)
如果要打印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())
打印出“打火石”