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

Cod*_*Cat 21 python get tkinter python-3.x 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()
Run Code Online (Sandbox Code Playgroud)

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

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

Bry*_*ley 34

看起来您可能会对命令何时运行感到困惑.在您的示例中,您get在GUI有机会显示在屏幕上之前调用该方法(在您调用之后会发生这种情况)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()
Run Code Online (Sandbox Code Playgroud)

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


zor*_*con 8

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

v = StringVar()

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

v.set("a default value")
s = v.get()
Run Code Online (Sandbox Code Playgroud)

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