从Tkinter的Entry小部件中获取输入文本并使用它

时间:2016-08-04 17:43:21

标签: python python-3.x tkinter

我搜索了几个小时但找不到有同样问题的人。我的问题出现在代码之后。

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)内运行。

2 个答案:

答案 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)