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

新手上路,请多包涵

我正在尝试使用 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 是空的。但是输入数据后如何访问输入数据呢?

原文由 CodingCat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

看起来您可能对何时运行命令感到困惑。在您的示例中,您在 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()

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

原文由 Bryan Oakley 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 v = StringVar()

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

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

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

原文由 zortacon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题