我正在尝试使用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()