为什么Tkinter Entry的函数返回什么?

时间:2012-05-23 20:12:16

标签: python python-3.x tkinter get tkinter-entry

我正在尝试使用Entry字段来获取手动输入,然后使用该数据。

我发现所有来源都声称我应该使用get()函数,但我还没有找到一个简单的工作迷你示例,我无法让它工作。

我希望有人可以告诉我我做错了什么。这是一个迷你文件:

from tkinter import *


master = Tk()

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

content = entry.get()
print(content)  # does not work

mainloop()

这给了我一个我可以输入的Entry字段,但是一旦输入数据,我就无法对数据做任何事情。

我怀疑我的代码不起作用,因为最初entry为空。但是,输入数据后如何访问输入数据?

6 个答案:

答案 0 :(得分:32)

看起来您可能会对命令何时运行感到困惑。在您的示例中,您在GUI有机会显示在屏幕上之前调用get方法(在您致电mainloop之后发生。

尝试添加一个调用get方法的按钮。如果将应用程序编写为类,则会更容易。例如:

import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.entry = tk.Entry(self)
        self.button = tk.Button(self, text="Get", command=self.on_button)
        self.button.pack()
        self.entry.pack()

    def on_button(self):
        print(self.entry.get())

app = SampleApp()
app.mainloop()

运行程序,输入条目小部件,然后单击按钮。

答案 1 :(得分:7)

你也可以使用StringVar变量,即使它不是绝对必要的:

v = StringVar()

e = Entry(master, textvariable=v)
e.pack()

v.set("a default value")
s = v.get()

有关详细信息,请参阅this page上的effbot.org

答案 2 :(得分:3)

没有类的简单示例:

from tkinter import *    
master = Tk()

# Create this method before you create the entry
def return_entry(en):
    """Gets and prints the content of the entry"""
    content = entry.get()
    print(content)  

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

# Connect the entry with the return button
entry.bind('<Return>', return_entry) 

mainloop()

答案 3 :(得分:1)

*

this.cameraService.getPicture().then

你做错了没把它放在一个Define函数中,然后你没有使用array = jQuery.csv.toArray(data); 函数和你设置的textvariable。

答案 4 :(得分:0)

您需要在其中放置一个文本变量,因此可以使用set()get()方法:

var=StringVar()
x= Entry (root,textvariable=var)

答案 5 :(得分:-1)

使用异常看起来简洁明了。此外,Python文档本身似乎认为在预期的情况下不应使用异常的建议与以下内容相矛盾: “ __next__()引发StopIteration异常, 告诉for循环终止。 ” (参考:https://docs.python.org/3/tutorial/classes.html第9.8段)