如何在 python tkinter 的条目或输入字段中使文本模糊和禁用

How to make text faint and disabled in an entry or input field in python tkinter

我试图让文本在后台被禁用。但是当我禁用它时用户也不能写文本

这个问题已经有人问过了, 但这些答案对我来说并不清楚,也不令人满意。 所以我决定post这个问题。

我希望文本类似于大多数网站登录页面上的输入字段,其中输入字段中已经写入了 'Username' 或 'Password' 等文本。

所以文字应该有点微弱,当用户开始输入时,文字应该会消失。所以用户不应该能够复制它并且不需要在输入之前将其删除。

这是我试过的方法,但没有用。

from tkinter import *
root = Tk()

my_entry = Entry(root, width=50)
my_entry.pack()
my_entry.insert(0, "Enter Your Name")
my_entry.configure(state=DISABLED)

root.mainloop()

用户也不能在输入字段中输入文本。

这对你有帮助吗?

from tkinter import *
root = Tk()

my_entry = Entry(root, width=50)
my_entry.pack()
my_entry.insert(0, "Enter Your Name")
my_entry.configure(state=DISABLED)

def on_click(event):
    my_entry.configure(state=NORMAL)
    my_entry.delete(0, END)

    # make the callback only work once
    my_entry.unbind('<Button-1>', on_click_id)

on_click_id = my_entry.bind('<Button-1>', on_click)

root.mainloop()

作为 class:

import tkinter as tk

class DefaultEntry(tk.Entry):
    def __init__(self, master=None, default_text='', **kw):
        super().__init__(master, **kw)
        self.insert(0, default_text)
        self.configure(state=tk.DISABLED)
        self.on_click_id = self.bind('<Button-1>', self.on_click)

    def on_click(self, _):
        self.configure(state=tk.NORMAL)
        self.delete(0, tk.END)

        # unregister myself
        self.unbind('<Button-1>', self.on_click_id)

root = tk.Tk()

my_entry = DefaultEntry(root, width=50, default_text='Enter your Name')
my_entry.pack()

root.mainloop()