Python 在tk.条目中显示灰显的默认文本
我想知道如何在下面的代码中定义的输入框中添加某种背景文本: 该框可能会显示“示例:Joe Bloggs”,但会变灰,然后在用户单击框内时删除?希望这不是太棘手Python 在tk.条目中显示灰显的默认文本,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,我想知道如何在下面的代码中定义的输入框中添加某种背景文本: 该框可能会显示“示例:Joe Bloggs”,但会变灰,然后在用户单击框内时删除?希望这不是太棘手 # ************ Retrieve user's Full name ************ tk.Label(self, text='First and last name:').grid(sticky='e') # Label self.full_name_entry = tk.Entr
# ************ Retrieve user's Full name ************
tk.Label(self, text='First and last name:').grid(sticky='e') # Label
self.full_name_entry = tk.Entry(self, bg='white', width=30) # Entry box
self.full_name_entry.grid(row=1, column=1, pady=15, columnspan=2) # Entry box placement
您需要:
- 使用
将默认文本添加到tk.Entry.insert
小部件中Entry
- 将前景色设置为“灰色”
- 当条目获得焦点时,默认值被删除,前景设置为“黑色”
- 你输入文本李>
- 按return键后,将提取条目的值,然后用灰色的默认文本重置条目李>
- 退出焦点也会将条目重置为默认灰色(您可能希望选择“避免”,因为如果您使条目失去焦点,部分条目将被删除;例如,单击框外)
import tkinter as tk
def handle_focus_in(_):
full_name_entry.delete(0, tk.END)
full_name_entry.config(fg='black')
def handle_focus_out(_):
full_name_entry.delete(0, tk.END)
full_name_entry.config(fg='grey')
full_name_entry.insert(0, "Example: Joe Bloggs")
def handle_enter(txt):
print(full_name_entry.get())
handle_focus_out('dummy')
root = tk.Tk()
label = tk.Label(root, text='First and last name:')
label.grid(sticky='e')
full_name_entry = tk.Entry(root, bg='white', width=30, fg='grey')
full_name_entry.grid(row=1, column=1, pady=15, columnspan=2)
full_name_entry.insert(0, "Example: Joe Bloggs")
full_name_entry.bind("<FocusIn>", handle_focus_in)
full_name_entry.bind("<FocusOut>", handle_focus_out)
full_name_entry.bind("<Return>", handle_enter)
root.mainloop()
将tkinter作为tk导入
def句柄焦点输入(uu):
全名项。删除(0,tk.END)
完整的\u name\u entry.config(fg='black')
def handle_focus_out(u):
全名项。删除(0,tk.END)
完整的\u name\u entry.config(fg='grey')
完整名称项。插入(0,“示例:Joe Bloggs”)
def句柄输入(txt):
打印(完整的\u name\u entry.get())
处理焦点输出('dummy')
root=tk.tk()
label=tk.label(根,text='First and last name:')
label.grid(sticky='e')
全名\u entry=tk.entry(根,背景为白色,宽度为30,前景为灰色)
完整的项目名称网格(行=1,列=1,pady=15,列span=2)
完整名称项。插入(0,“示例:Joe Bloggs”)
完整的\u名称\u条目.bind(“,句柄\u焦点\u in)
全名\u项。绑定(“,句柄\u焦点\u出)
完整的\u名称\u项。绑定(“,句柄\u项)
root.mainloop()
以下是打开窗口时的外观:
聚焦于条目
小部件后,示例文本被删除,字体颜色变为黑色;填写条目后,该方面是:
您需要:
- 使用
将默认文本添加到tk.Entry.insert
小部件中Entry
- 将前景色设置为“灰色”
- 当条目获得焦点时,默认值被删除,前景设置为“黑色”
- 你输入文本李>
- 按return键后,将提取条目的值,然后用灰色的默认文本重置条目李>
- 退出焦点也会将条目重置为默认灰色(您可能希望选择“避免”,因为如果您使条目失去焦点,部分条目将被删除;例如,单击框外)
import tkinter as tk
def handle_focus_in(_):
full_name_entry.delete(0, tk.END)
full_name_entry.config(fg='black')
def handle_focus_out(_):
full_name_entry.delete(0, tk.END)
full_name_entry.config(fg='grey')
full_name_entry.insert(0, "Example: Joe Bloggs")
def handle_enter(txt):
print(full_name_entry.get())
handle_focus_out('dummy')
root = tk.Tk()
label = tk.Label(root, text='First and last name:')
label.grid(sticky='e')
full_name_entry = tk.Entry(root, bg='white', width=30, fg='grey')
full_name_entry.grid(row=1, column=1, pady=15, columnspan=2)
full_name_entry.insert(0, "Example: Joe Bloggs")
full_name_entry.bind("<FocusIn>", handle_focus_in)
full_name_entry.bind("<FocusOut>", handle_focus_out)
full_name_entry.bind("<Return>", handle_enter)
root.mainloop()
将tkinter作为tk导入
def句柄焦点输入(uu):
全名项。删除(0,tk.END)
完整的\u name\u entry.config(fg='black')
def handle_focus_out(u):
全名项。删除(0,tk.END)
完整的\u name\u entry.config(fg='grey')
完整名称项。插入(0,“示例:Joe Bloggs”)
def句柄输入(txt):
打印(完整的\u name\u entry.get())
处理焦点输出('dummy')
root=tk.tk()
label=tk.label(根,text='First and last name:')
label.grid(sticky='e')
全名\u entry=tk.entry(根,背景为白色,宽度为30,前景为灰色)
完整的项目名称网格(行=1,列=1,pady=15,列span=2)
完整名称项。插入(0,“示例:Joe Bloggs”)
完整的\u名称\u条目.bind(“,句柄\u焦点\u in)
全名\u项。绑定(“,句柄\u焦点\u出)
完整的\u名称\u项。绑定(“,句柄\u项)
root.mainloop()
以下是打开窗口时的外观:
聚焦于条目
小部件后,示例文本被删除,字体颜色变为黑色;填写条目后,该方面是:
欢迎来到堆栈溢出。我已经删掉了你的新请求。您考虑输入框的HTML5占位符属性是正确的。欢迎使用堆栈溢出。我已经删掉了你的新请求。您考虑输入框的HTML 5占位符属性是正确的。您可以使用
root.focus()
从输入小部件手动删除焦点,而不是执行handle\u focus\u out('dummy')
。这样做的好处是焦点实际上丢失了(如果在按Enter键后键入,它不会出现在条目中),FocusOut事件会自动触发。另外,在handle\u focus\u out()
中,只有当小部件为空时,我才会返回到占位符,并在handle\u enter()
函数中清空小部件。现在只有一个条目,但如果有更多条目,这不会有太大的区别。同意@fhdrsdg。我会让OP决定他想要的确切行为;此时此刻,它还未被定义,向前冲可能是徒劳的。真的,真的。考虑到问题的广泛性,你的答案已经相当广泛了。我们已经取得了进展!!谢谢你。我就是不知道该把定义放在哪里?我有示例文本,它以灰色显示,当单击时,它会一直保持灰色,但无论我在哪里添加定义,它都会出错?什么定义?您可以使用root.focus()
从条目小部件手动移除焦点,而不是执行handle\u focus\u out('dummy')
。这样做的好处是焦点实际上丢失了(如果在按Enter键后键入,它不会出现在条目中),FocusOut事件会自动触发。另外,在handle\u focus\u out()
中,只有当小部件为空时,我才会返回到占位符,并在handle\u enter()
函数中清空小部件。现在只有一个条目,但如果有更多条目,这不会有太大的区别。同意@fhdrsdg。我会让OP决定他想要的确切行为;此时此刻,它还未被定义,向前冲可能是徒劳的。真的,真的。考虑到问题的广泛性,你的答案已经相当广泛了。我们已经取得了进展!!谢谢你。我就是不知道