如何使用函数清除多个tkinter输入字段

时间:2016-03-18 15:43:59

标签: user-interface python-3.x tkinter callback bind

我有一个相当简单的问题,就是当我在GUI上的特定tkinter输入字段中按下退格键时,它会删除任何文本的字段。 一切进展顺利,直到我想在多个输入字段上使用此方法。

代码

import tkinter


class BuildWidgets:

    def __init__(self, master):

        self.master = master   # reference the main window
        self.BACKSPACE = ''

        self.TextBox = tkinter.Entry(self.master,width=10)
        self.TextBox.bind("<Key>", self.clearTextBox)
        self.TextBox.pack()

        self.TextBox2 = tkinter.Entry(self.master,width=10)
        self.TextBox2.bind("<Key>", self.clearTextBox2)
        self.TextBox2.pack()


    def clearTextBox(self,event):
        pressed = event.char
        if pressed == self.BACKSPACE:
            self.TextBox.delete(0,'end')

    def clearTextBox2(self,event):   #I want to eliminate repetitive methods
        pressed = event.char
        if pressed == self.BACKSPACE:
            self.TextBox2.delete(0,'end')

我基本上将键事件绑定到输入字段,并且回调检查是否按下了退格,如果是,则删除文本。但是,当我添加第二个输入字段时,我需要创建第二个方法,并且每个输入字段都会继续显示!这是因为我无法找到将条目传递给单个方法的方法,因为它是小部件中的回调。

问题

我如何或者可以创建一个明确的方法来区分哪个输入字段正在调用它?

1 个答案:

答案 0 :(得分:2)

传递给函数的event对象具有widget属性,该属性是捕获错误的小部件。

def clearTextBox(self,event):
    pressed = event.char
    if pressed == self.BACKSPACE:
        event.widget.delete(0,'end')