为什么 Tkinter Entry 的 get 函数没有返回任何内容?
- 2025-02-08 08:52:00
- admin 原创
- 53
问题描述:
我正在尝试使用一个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
是空的。但是输入数据后如何访问它呢?
解决方案 1:
看起来您可能对命令的运行时间感到困惑。在您的示例中,您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()
运行程序,在输入窗口小部件中输入内容,然后单击按钮。
解决方案 2:
您也可以使用StringVar
变量,即使它不是绝对必要的:
v = StringVar()
e = Entry(master, textvariable=v)
e.pack()
v.set("a default value")
s = v.get()
有关更多信息,请参阅effbot.org上的此页面。
解决方案 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()
解决方案 4:
*
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()
您做错的是没有将其放入 Define 函数中,然后您没有将该.get
函数与您设置的文本变量一起使用。
解决方案 5:
您需要在其中放置一个文本变量,以便可以使用set()
和get()
方法:
var=StringVar()
x= Entry (root,textvariable=var)
解决方案 6:
我找到的大多数答案仅显示了如何使用 tkinter 作为 tk 来实现这一点。这对我来说是个问题,因为我的程序长达 300 行,还有大量其他标签和按钮,我不得不对其进行大量更改。
这是一种无需导入或使用 StringVars 即可实现的方法tkinter as tk
。我修改了原始小程序,如下所示:
使其成为一个类
添加一个按钮和一个额外的方法。
此程序打开一个 tkinter 窗口,其中有一个输入框和一个“Enter”按钮。单击 Enter 按钮将打印输入框中的所有内容。
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()
解决方案 7:
以下是对我有用的方法:
from tkinter import *
master = Tk()
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
def click(entry):
content = entry.get()
print(content)
add_but = Button(text="Add", width=36, command=lambda: click(entry))
add_but.grid(row=1, column=1)
mainloop()
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD