为什么 Tkinter 条目的 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是空的。但是,输入输入数据后如何访问输入数据?

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

运行程序,在输入小部件中键入,然后单击按钮。

您也可以

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

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

*

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函数与你设置的文本变量一起使用。

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

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

我找到的大多数答案只显示了如何使用 tkinter 作为 tk 来做到这一点。这对我来说是一个问题,因为我的程序有 300 行长,还有大量的其他标签和按钮,我将不得不更改很多。

这是一种无需导入tkinter as tk或使用 StringVars 的方法。我通过以下方式修改了原来的小程序:

  • 使其成为一个类
  • 添加一个按钮和一个额外的方法。

该程序会打开一个带有输入框和"输入"按钮的tkinter窗口。单击"输入"按钮可打印输入框中的任何内容。

from tkinter import *
class mini():
    def __init__(self):
    
        master = Tk()
        Label(master, text="Input: ").grid(row=0, sticky=W)
        Button(master, text='Enter', command=self.get_content).grid(row=1)
        self.entry = Entry(master)
        self.entry.grid(row=0, column=1)
        master.mainloop()
    def get_content(self):
        content = self.entry.get()
        print(content)  

m = mini()

相关内容

  • 没有找到相关文章

最新更新