Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将条目小部件输入传递给绑定/事件处理程序函数_Python_Tkinter - Fatal编程技术网

Python 将条目小部件输入传递给绑定/事件处理程序函数

Python 将条目小部件输入传递给绑定/事件处理程序函数,python,tkinter,Python,Tkinter,这里是Python新手。 我有一个输入小部件,并希望在其上操作一个键绑定,允许我将诸如“输入喜爱的食物”之类的说明直接放入输入框中,并让它在单击时消失,以允许用户填写字段。 通过使用Entry.get()使用全局变量,我可以很容易地做到这一点 为了提高效率,我一直在试图找到一种方法来避免使用global,而是使用lambda,但是没有太多的运气让它工作 非常感谢您的帮助。很难帮助您,因为我们没有太多的代码,但这应该可以工作 favourite_food = Entry(window) favou

这里是Python新手。 我有一个输入小部件,并希望在其上操作一个键绑定,允许我将诸如“输入喜爱的食物”之类的说明直接放入输入框中,并让它在单击时消失,以允许用户填写字段。 通过使用Entry.get()使用全局变量,我可以很容易地做到这一点

为了提高效率,我一直在试图找到一种方法来避免使用global,而是使用lambda,但是没有太多的运气让它工作


非常感谢您的帮助。

很难帮助您,因为我们没有太多的代码,但这应该可以工作

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')