27

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

4

5 回答 5

48

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

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

于 2012-05-23T23:00:55.993 回答
10

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

v = StringVar()

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

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

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

于 2012-05-23T20:17:18.817 回答
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()
于 2016-09-12T15:20:04.720 回答
2

*

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你设置的文本变量的函数。

于 2016-03-02T21:15:20.293 回答
-1

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

var=StringVar()
x= Entry (root,textvariable=var)
于 2019-10-15T09:13:21.160 回答