我搜索了几个小时但找不到有同样问题的人。我的问题出现在代码之后。
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 返回的值。这样调用就会出错:
TypeError:aMethodToGetText()缺少1个必需的位置参数:&#39; event&#39;
使用h = self.aMethodToGetText(self.hEntry)并删除小部件。也不起作用。
如果您有1个条目,可以轻松解决。但我有很多Entrys并且必须为我的所有Entrys制作一般文本getter方法。
编辑:所以每个条目都需要一个函数?我想在不同的条件,功能和切片中使用每个条目。这就是我为每个条目需要一个变量的原因。我无法将我的代码在anotherMethod(self)中移动到aMethodToGetText(self,event),因为我不希望每次按下Enter按钮时该函数重新开始。如果我在任何条目上按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 ---
我收到错误,因为在用户按Enter键之前列表为空。我尝试在行time.sleep(x)
之前使用h = self.entryList[0]
来设置脚本,但这不起作用。在用户按Enter键之前,我不希望程序在整个anotherMethod(self)
内运行。
答案 0 :(得分:0)
编辑:示例有两个条目小部件,用于配置标签,以便在内容匹配时显示。
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()
答案 1 :(得分:-2)
不知道是否会奏效,但你试过lambda吗?类似的东西:
lambda event, h = event.widget.get(): self.aMethodToGetText(event)