此处是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的方法,但是运气不高。
非常感谢您的帮助。
答案 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, '')