Tkinter中按下时清除输入框文本

4

我不确定这个问题是否已经被问过,但是我有多个输入框,它们包含默认的文本。我不是想设置默认文本,而是在单击输入框时删除它。我希望能够在用户单击输入框时立即删除默认文本,以便用户无需自行操作。我想知道是否有人可以分享一个快速示例,演示如何实现此功能。

    def removeValue(event):
        self.entry.delete(0, 'end')
        return None

    for i in range(1, numberOfStudents + 1):
        for p in range(0,2):
            self.entry = Entry(self.master)
            if p == 0:
                self.entry.insert(0, 'Enter name of student')
                self.entry.place(x = 10, y = (i * 30) + 26)
                self.entry.bind("<Button-1>", removeValue)
            if p == 1:
                self.entry.insert(0, 'Enter predicted')
                self.entry.place(x = (getWidth(master) - 140), y = (i * 30) + 26)
                self.entry.bind("<Button-1>", removeValue)

到目前为止我只完成了这个功能,但它只能删除最后一个输入框中的文本。


2
entry.bind("<Button-1>", 函数名) - furas
1
我该如何使用这个? - Montè Clements
2个回答

11
假设您已经处理好了默认文本,您需要在某个地方创建一个事件绑定,其一般格式如上方注释所示。不确定为什么它不是一个答案,因为它是正确的。
import tkinter as tk

root = tk.Tk()
e = tk.Entry(root)
e.insert(0, "some text")

def some_callback(event): # note that you must include the event as an arg, even if you don't use it.
    e.delete(0, "end")
    return None

e.bind("<Button-1>", some_callback)

e.pack()

最后,http://effbot.org 是你的好朋友:http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm 编辑:根据评论提供的额外信息。 如果您有多个条目并且需要单独清除每个条目,则可以使用调用绑定方法的小部件进行引用。
event.widget

你的回调函数可以按照以下方式进行操作:

def some_callback(event):
    event.widget.delete(0, "end")
    return None

1
为了完整的示例,请不要忘记“pack”小部件。 - Reti43
再次感谢您的好建议,我会加上这个以保证完整性。给你点赞,今天让我保持在正确的轨道上 :) - Blackbeard
谢谢你的帮助。我以为只需要在我的For循环中包含它就可以了。我有多个输入框,我已经让它工作了,但是当我点击一个输入框时,它会删除上一个创建的文本。有没有办法可以将其设置为循环内创建的每个单独的输入框? - Montè Clements
是的 - 请看我的编辑或者 @Bryan Oakley 的回答,我们好像差不多同时添加了它们。 - Blackbeard
关于:“与上面评论的一般格式”- 你知道答案在不同时间可能会以不同的顺序出现吗?就我所看到的,没有“上面的评论”。你指的是哪个评论? - Bryan Oakley
显示剩余3条评论

1
事件绑定调用的方法会传递一个事件对象。该对象包含一个引用,指向触发事件的小部件。您可以使用该引用来清除小部件:
def removeValue(event):
    event.widget.delete(0, 'end')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接