Python 将条目小部件输入传递给绑定/事件处理程序函数
这里是Python新手。 我有一个输入小部件,并希望在其上操作一个键绑定,允许我将诸如“输入喜爱的食物”之类的说明直接放入输入框中,并让它在单击时消失,以允许用户填写字段。 通过使用Entry.get()使用全局变量,我可以很容易地做到这一点 为了提高效率,我一直在试图找到一种方法来避免使用global,而是使用lambda,但是没有太多的运气让它工作Python 将条目小部件输入传递给绑定/事件处理程序函数,python,tkinter,Python,Tkinter,这里是Python新手。 我有一个输入小部件,并希望在其上操作一个键绑定,允许我将诸如“输入喜爱的食物”之类的说明直接放入输入框中,并让它在单击时消失,以允许用户填写字段。 通过使用Entry.get()使用全局变量,我可以很容易地做到这一点 为了提高效率,我一直在试图找到一种方法来避免使用global,而是使用lambda,但是没有太多的运气让它工作 非常感谢您的帮助。很难帮助您,因为我们没有太多的代码,但这应该可以工作 favourite_food = Entry(window) favou
非常感谢您的帮助。很难帮助您,因为我们没有太多的代码,但这应该可以工作
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, '')
favorite_food=条目(窗口)
喜爱的食物。插入(0,“输入喜爱的食物”)
fist_name.bind(“”,lambda事件:食物点击(喜爱的食物))
def食物_单击(输入):
如果entry.get()=“输入喜爱的食物”:
条目。删除(0,“结束”)
条目。插入(0“”)
您不需要传递任何内容或使用全局密码。传递给函数的事件对象具有所需的一切:
def food_click(event):
if event.widget.get() == 'Input Favourite Food':
event.widget.delete(0, "end")
event.widget.insert(0, '')
您可以使用事件
和
执行您想要的操作。下面是一个定制的条目
,以实现此功能:
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')
这个很好用。一个吹毛求疵的评论:当您键入与提示相同的文本时,当您向外和向内聚焦时,文本将被删除。我同意这是一个非常特殊的案例,不应该经常发生,但仍然存在。
def food_click(event):
if event.widget.get() == 'Input Favourite Food':
event.widget.delete(0, "end")
event.widget.insert(0, '')
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')
entry = MyEntry(prompt='Enter favorite food')