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?
请帮忙。
谢谢。
答案 0 :(得分:4)
问题在于,在用户有机会输入任何内容之前,您将获得条目窗口小部件的值,因此它始终是空字符串。
如果您在用户输入内容之前等待获取,则您的代码将按原样正常工作。虽然,我没有看到任何使用StringVar
的理由,因为它只是添加了一个没有实际意义的额外对象。没有理由将StringVar
与条目小部件一起使用,除非您需要StringVar
获得的额外功能 - 即变量跟踪。
您看到PY_VAR0
的原因是您必须使用get
方法从StringVar
的实例中获取值。将您的陈述更改为print input1.get()
。
答案 1 :(得分:3)
获取StringVar
来电get()
的内容:
input1.get()
此外,您应该将StringVar
绑定到Entry
,否则StringVar
不会随Entry
小部件的内容而改变:
entry1.config(textvariable=input1)
或者你可以在构造中绑定:
input1 = StringVar()
entry1 = tk.Entry(root1, textvariable=input1)
答案 2 :(得分:0)
如果要打印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())
打印出“打火石”