【问题标题】:Showing a greyed out default text in a tk.Entry在 tk.Entry 中显示灰色的默认文本
【发布时间】:2019-01-17 18:47:08
【问题描述】:

我想知道如何在下面附加的代码中定义的输入框中添加某种背景文本:

该框可能会显示“示例:Joe Bloggs”,但是当用户在框内单击时显示为灰色然后删除?希望这不会太棘手。

        # ************ 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

【问题讨论】:

  • 欢迎来到 Stack Overflow。我已经删除了你是新人的额外请求。您正在考虑为您的输入框使用 HTML 5 Placeholder 属性是正确的。

标签: python tkinter tkinter-entry


【解决方案1】:

你需要:

  • 使用tk.Entry.insert 将默认文本添加到Entry 小部件
  • 将前景色设置为“灰色”
  • 条目获得焦点后,默认值被删除,前景设置为“黑色”。
  • 您输入文本。
  • 按下回车键后,条目的值被提取,然后条目被重置,默认文本为灰色。
  • 退出焦点还会将该条目重置为默认灰色(您可能需要选择避免这种情况,因为如果您使条目失去焦点,部分条目将被删除;例如,通过单击框外)

这是代码的样子

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

这是打开窗口时的样子:

在关注Entry 小部件时,示例文本被删除,字体颜色变为黑色;填写条目后,aspect是:

【讨论】:

  • 您可以使用root.focus() 手动从条目小部件中移除焦点,而不是使用handle_focus_out('dummy')。这样做的好处是焦点实际上丢失了(如果您在按 Enter 后键入它不会出现在 Entry 中)并且 FocusOut 事件会自动触发。此外,在handle_focus_out() 中,如果小部件为空,我只会恢复为占位符,并在handle_enter() 函数中清空小部件。现在只有一个条目,这并没有太大的区别,但是当有更多条目时,它会产生太大的影响。
  • 同意@fhdrsdg。我会让 OP 决定他想要的确切行为;此刻,它的定义不足,向前冲锋可能是徒劳的。
  • 真的,真的。考虑到问题的广泛性,您的回答已经相当广泛了。
  • 我们有进步!!感谢那。我只是不知道在哪里放置定义?我有示例文本,它显示为灰色,单击时它会保持并保持灰色,但无论我在哪里添加定义都会出错?
  • 什么定义?
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2017-07-06
  • 2013-01-10
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多