为什么Tkinter Entry的get函数什么都不返回?

我试图使用一个Entry字段来获得手动input,然后使用该数据。

我发现所有的来源声称我应该使用get()函数,但我还没有find一个简单的工作小例子,我不能得到它的工作。

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

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

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

我怀疑我的代码不工作,因为最初, entry是空的。 但是一旦input数据被input,我该如何访问input数据呢?

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

尝试添加一个调用get方法的button。 如果您将应用程序编写为一个类,这将变得更加容易。 例如:

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

运行程序,键入入口小部件,然后点击button。

你也可以使用一个StringVarvariables,即使它不是必须的:

 v = StringVar() e = Entry(master, textvariable=v) e.pack() v.set("a default value") s = v.get() 

有关更多信息,请参阅effbot.org上的此页面 。

一个没有类的简单例子:

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

你可以做的是

 from tkinter import * master = Tk() entryb1 = StringVar Label(master, text="Input: ").grid(row=0, sticky=W) entry = Entry(master, textvariable=entryb1) entry.grid(row=1, column=1) b1 = Button(master, text="continue", command=print_content) b1.grid(row=2, column=1) def print_content(): global entryb1 content = entryb1.get( print(content) master.mainloop() 

你做错了没有把它放在Define函数里面,那么你没有使用你设置的textvariable的“.get”函数