从Tkinter的Entry小部件中获取输入文本并使用它
问题描述:
我已经搜索了几个小时,但找不到有相同问题的人。我的问题出现在代码之后。从Tkinter的Entry小部件中获取输入文本并使用它
class Interface:
def __init__(self, root):
--- Stuff Here ---
self.hEntry = Entry(lFrame)
self.hEntry.bind("<Return>", self.aMethodToGetText)
--- Stuff Here ---
def aMethodToGetText(self, event):
return event.widget.get()
def anotherMethod(self):
--- Stuff Here ---
self.hEntry.pack()
h = self.aMethodToGetText()??????????????????
--- Stuff Here ---
我想给我的变量^h值的方法aMethodToGetText回报。调用这样说,这将OFC给出一个错误:
类型错误:aMethodToGetText()缺少1个所需位置参数: '事件'
使用H = self.aMethodToGetText(self.hEntry),并删除插件。也不起作用。
如果您有1个条目,可以轻松解决。但我有很多Entrys,必须为我的所有Entrys制作一个通用的文本getter方法。
编辑:所以我需要一个函数为每个条目?我想在不同的条件,功能和切片中使用每个条目。这就是为什么我需要每个条目的变量。我不能将我的代码在另一个方法(self)中移动到aMethodToGetText(self,event),因为我不希望每次按下输入按钮时都要重新启动该函数。如果我在任何条目上按Enter键,我希望他们做同样的事情,将条目分配给一个变量。但是每个条目都应该分配给不同的变量。我需要比较互相的信任。
编辑2:
class Interface:
def __init__(self, root):
--- Stuff Here ---
self.aListForEntries = []
self.hEntry = Entry(lFrame)
self.hEntry.bind("<Return>", self.aMethodToGetText)
self.aEntry = Entry(lFrame)
self.aEntry.bind("<Return>", self.aMethodToGetText)
--- Stuff Here ---
def aMethodToGetText(self, event):
entry = event.widget.get()
self.aListForEntries.append(entry)
def anotherMethod(self):
--- Stuff Here ---
self.hEntry.pack()
h = self.entryList[0] #IndexError: list index out of range
--- Check the first Entry ---
self.aEntry.pack()
a = self.entryList[1]
--- Check the second Entry ---
if h == a:
Do stuff
--- Stuff Here ---
我得到一个错误,因为用户按下回车时,列表为空。我试图在行h = self.entryList[0]
之前用脚本time.sleep(x)
来解决问题,但这不起作用。我不希望程序在用户按Enter键之前运行整个anotherMethod(self)
。
答
不知道是否会工作,但你有没有尝试与lambda?是这样的:
lambda event, h = event.widget.get(): self.aMethodToGetText(event)
答
编辑:的例子有两个入口小部件配置标签内容是否匹配显示器。
import tkinter as tk
class Example(object):
def __init__(self, master):
self._master = master
self._lbl = tk.Label(master, text = '?')
self._lbl.pack(side = tk.LEFT)
self.hEntry = tk.Entry(master)
self.hEntry.bind("<Return>", self.update)
self.hEntry.pack()
self.aEntry = tk.Entry(master)
self.aEntry.bind("<Return>", self.update)
self.aEntry.pack()
def update(self, event):
if self.hEntry.get() == self.aEntry.get():
self._lbl.config(text = "Match")
else:
self._lbl.config(text = "No Match")
if __name__ == '__main__':
root = tk.Tk()
app = Example(root)
root.mainloop()
@noscreenname第一个参数'self'被暗示,因为它是一种方法 - 它需要一个参数,event。 – Delioth
如果你有多个条目,那么你能否提供这种情况的例子。根据你想要为每个条目做什么,解决方案会有很大的不同。如果你在任何条目上按回车,他们是否应该做同样的事情或每件事情不同?如果不同,那么除非使用该条目或条目添加条件,否则不能具有通用功能。 –
@StevenSummers所以我需要一个函数为每个条目?我想在不同的条件,功能和切片中使用每个条目。这就是为什么我需要每个条目的变量。我不能在另一个方法(self)中将我的代码移动到aMethodToGetText(self,event),因为我不希望每次按下按钮时都要重新启动该函数。 编辑:如果我按任何条目输入,我希望他们做同样的事情,将条目分配给一个变量。但是每个条目都应该分配给不同的变量。我需要比较互相的信任。 –
WildRoyal