Python 将Tkinter小部件重置为其默认值

Python 将Tkinter小部件重置为其默认值,python,tkinter,Python,Tkinter,需要生成一个通用函数,在事件发生时,它会将聚焦输出小部件返回到其默认值。有没有办法做到这一点 例如: entry1 = Tkinter.Entry() entry1.grid(..) entry1.insert(0,"hello") entry1.bind("<FocusIn>", EntryFocusedIn) entry1.bind("<FocusOut>", EntryFocusedOut) entry2 = Tkinter.Entry() entry2.grid

需要生成一个通用函数,在事件发生时,它会将聚焦输出小部件返回到其默认值。有没有办法做到这一点

例如:

entry1 = Tkinter.Entry()
entry1.grid(..)
entry1.insert(0,"hello")
entry1.bind("<FocusIn>", EntryFocusedIn)
entry1.bind("<FocusOut>", EntryFocusedOut)

entry2 = Tkinter.Entry()
entry2.grid(..)
entry2.insert(0,"again")
entry2.bind("<FocusIn>", EntryFocusedIn)
entry2.bind("<FocusOut>", EntryFocusedOut)  

def EntryFocusedIn(params):
     params.widget.delete(0, Tkinter.END)

def EntryFocusedOut(params):
     # return widget to its default value
     # which in case of entry1 its "hello"
     # and in case of entry2 its "again"
您可以对条目小部件进行子类化,以添加一个属性来存储默认值,并在事件处理程序中引用该属性。但是,没有什么可以阻止您直接向每个条目小部件添加自己的属性,例如entry1.default\u value='hello',entry1.default\u value='reach':

您可以对条目小部件进行子类化,以添加一个属性来存储默认值,并在事件处理程序中引用该属性。但是,没有什么可以阻止您直接向每个条目小部件添加自己的属性,例如entry1.default\u value='hello',entry1.default\u value='reach':


它是如何知道你认为默认值是什么?为此,我建议您创建一个自定义条目子类,例如默认值属性。这是一个好主意,我希望条目的默认初始值已经有一个内置函数,该值是在生成时设置的。不,就条目而言,该值没有什么特别之处。明白,谢谢。它是如何知道你认为默认值是什么?为此,我建议您创建一个自定义条目子类,例如带有默认值属性。这是一个好主意,我希望条目的默认初始值已经有一个内置函数,该值是在构建时设置的。不,就条目而言,该值没有什么特殊之处。理解了,谢谢。
import Tkinter

def EntryFocusedIn(params):
    params.widget.delete(0, Tkinter.END)

def EntryFocusedOut(params):
    # restore default value
    params.widget.delete(0, Tkinter.END)
    params.widget.insert(0, params.widget.default_value)

root = Tkinter.Tk()

entry1 = Tkinter.Entry()
entry1.default_value = 'hello'
entry1.pack()
entry1.insert(0, entry1.default_value)
entry1.bind("<FocusIn>", EntryFocusedIn)
entry1.bind("<FocusOut>", EntryFocusedOut)

entry2 = Tkinter.Entry()
entry2.default_value = 'again'
entry2.pack()
entry2.insert(0, entry2.default_value)
entry2.bind("<FocusIn>", EntryFocusedIn)
entry2.bind("<FocusOut>", EntryFocusedOut)

root.mainloop()