2016-01-02 41 views
0

我不确定这是否已被询问,但我有多个输入框,其中包含默认的一段文本。我不想设置默认的文本片段,我试图在输入框被点击时删除。我希望能够在单击输入框后立即删除默认文本,以便用户不必这样做。我想知道是否有人可以分享一个快速例子,说明如何实现这一点,以便我可以实施。当按下输入框文本时清除Tkinter

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(“”,function_name)'? – furas

+1

我将如何去使用它? –

回答

2

假设你有你的默认文字整理出来,你想创建一个事件某处结合,与注释的一般格式以上,不知道为什么它不是一个答案,因为它是正确的:

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

编辑:从评论OP附加信息。 如果你有多个条目,你需要单独清除各一个,你可以简单地指的是所谓的使用

event.widget 

你的回调则可能为工作遵循绑定的方法的部件:

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

有关完整的示例,请不要忘记对该小部件进行“包装”。 – Reti43

+0

再一次,你有一个好点,我会补充完整性。为你+1,让我今天排队:) – Blackbeard

+0

感谢您的帮助。我认为它会像将它包含在我的For循环中一样简单。我有多个输入框,我有它的工作,但是当我点击一个输入框时,它会删除最后一个创建的文本。有没有一种方法可以将它设置为我在循环中创建的每个单独的输入框? –

1

由事件绑定调用的方法被赋予一个事件对象。该对象具有对触发事件的小部件的引用。您可以使用它来清除小部件:

def removeValue(event): 
    event.widget.delete(0, 'end') 
相关问题