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

时间:2014-01-22 19:08:14

标签: python tkinter

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 个答案:

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

打印出“打火石”