如何将占位符添加到 tkinter 中的条目?

新手上路,请多包涵

我在 tkinter 中创建了一个登录窗口,它有两个输入字段,第一个是用户名,第二个是密码。

代码

from tkinter import *

ui = Tk()

e1 = Entry(ui)
#i need a placeholder "Username" in the above entry field
e1.pack()

ui.mainloop()

我想要一个名为“用户名”的占位符 Entry ,但如果您在输入框内单击,文本应该消失。

原文由 Pierce 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

您需要为此条目设置默认值。像这样:

 from tkinter import *

ui = Tk()

e1 = Entry(ui)
e1.insert(0, 'username')
e1.pack()

ui.mainloop()

那么如果你想在点击条目时删除内容,那么你必须绑定一个鼠标点击事件和一个事件处理方法来更新这个条目的内容。这是给你的 链接

原文由 Stephen Lin 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以创建一个继承自 Entry 的类,如下所示:

 import tkinter as tk

class EntryWithPlaceholder(tk.Entry):
    def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'):
        super().__init__(master)

        self.placeholder = placeholder
        self.placeholder_color = color
        self.default_fg_color = self['fg']

        self.bind("<FocusIn>", self.foc_in)
        self.bind("<FocusOut>", self.foc_out)

        self.put_placeholder()

    def put_placeholder(self):
        self.insert(0, self.placeholder)
        self['fg'] = self.placeholder_color

    def foc_in(self, *args):
        if self['fg'] == self.placeholder_color:
            self.delete('0', 'end')
            self['fg'] = self.default_fg_color

    def foc_out(self, *args):
        if not self.get():
            self.put_placeholder()

if __name__ == "__main__":
    root = tk.Tk()
    username = EntryWithPlaceholder(root, "username")
    password = EntryWithPlaceholder(root, "password", 'blue')
    username.pack()
    password.pack()
    root.mainloop()

原文由 Nae 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题