【问题标题】:Why is Tkinter Entry's get function returning nothing?为什么 Tkinter Entry 的 get 函数什么都不返回?
【发布时间】:2012-05-30 10:12:56
【问题描述】:

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

【问题讨论】:

  • 在您的示例中,您到底期待什么?在调用 get 之前,您没有给条目小部件提供任何文本,所以它当然会返回一个空字符串。

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


【解决方案1】:

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

v = StringVar()

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

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

有关更多信息,请参阅effbot.org 上的this page

【讨论】:

  • 严格来说,StringVar 不是必需的。它们很方便,但对于这个问题,它们完全是多余的。
【解决方案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()

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

【讨论】:

  • 啊,我明白了。我对课程还不是很坚定(通常仍然是编程的初学者),但我看到了问题。我只会做一个“分析!”按钮并将get()函数放在那里,这应该可以工作。谢谢!
  • 您可能需要在调用超类 init 时添加 self 作为参数:tk.Tk.__init__(self)。否则,非常有用的例子!
  • 而且,呃,你在最后一行拼错了 app。 <_>
【解决方案3】:

*

master = Tk()
entryb1 = StringVar

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

Entry(master, textvariable=entryb1).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()

你做错的不是把它放在定义函数中,然后你没有使用 .get 函数和你设置的文本变量。

【讨论】:

    【解决方案4】:

    一个没有类的简单例子:

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

    【讨论】:

      【解决方案5】:

      你需要在里面放一个文本变量,所以你可以使用set()get()方法:

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

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 1970-01-01
        • 2018-03-04
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多