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

问题描述 投票:3回答:3
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?

请帮助。

谢谢。

python tkinter
3个回答
6
投票

问题是,在用户有机会键入任何内容之前,您已经获得了条目小部件的值,因此它始终是空字符串。

如果您等到用户输入内容后再进行获取,您的代码将保持原样。不过,我看不出使用StringVar的任何理由,因为它只是添加了一个没有实际用途的对象。除非您需要StringVar为您带来的额外功能(即变量跟踪),否则没有理由将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)

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

打印出“打火石”

© www.soinside.com 2019 - 2024. All rights reserved.