将Entry小部件输入传递给绑定/事件处理函数

时间:2019-03-22 00:05:22

标签: python tkinter

此处是Python新手。 我有一个Entry小部件,并希望对其进行操作,使我可以将“ Input Favorite Food”之类的说明直接放入输入框中,并使其单击消失,以允许用户填写该字段。 我可以通过使用Entry.get()

global favourite_food 
favourite_food = Entry(window)
favourite_food.insert(0, 'Input Favourite Food')
fist_name.bind('<FocusIn>', food_click)

def food_click(event):
    if favourite_food.get() == 'Input Favourite Food':
       favourite_food.delete(0, "end")
       favourite_food.insert(0, '')

为了提高效率,我一直在尝试一种避免使用全局变量而使用lambda的方法,但是运气不高。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用事件<FocusIn><FocusOut>来执行所需的操作。以下是实现此目标的自定义Entry

class MyEntry(Entry):
    def __init__(self, *args, **kwargs):
        self.prompt = kwargs.pop('prompt') if 'prompt' in kwargs else None
        super().__init__(*args, **kwargs)
        if self.prompt:
            self.bind('<FocusIn>', self.on_focus_in)
            self.bind('<FocusOut>', self.on_focus_out)
            self.on_focus_out()

    def on_focus_in(self, event=None):
        if self.get() == self.prompt:
            self.delete(0, 'end')
            self.config(fg='black')

    def on_focus_out(self, event=None):
        if self.get() == '':
            self.insert('end', self.prompt)
            self.config(fg='gray')

然后,您可以像往常一样使用关键字参数prompt初始化条目以显示消息:

entry = MyEntry(prompt='Enter favorite food')

答案 1 :(得分:0)

由于我们的代码不多,很难为您提供帮助,但这应该可以解决

favourite_food = Entry(window)
favourite_food.insert(0, 'Input Favourite Food')
fist_name.bind('<FocusIn>', lambda event: food_click(favourite_food))

def food_click(entry):
    if entry.get() == 'Input Favourite Food':
        entry.delete(0, "end")
        entry.insert(0, '')

答案 2 :(得分:0)

您无需传递任何内容或使用全局变量。传递给函数的事件对象具有您所需的一切:

def food_click(event):
    if event.widget.get() == 'Input Favourite Food':
        event.widget.delete(0, "end")
        event.widget.insert(0, '')