如何在python tkinter中使条目或输入字段中的文本变暗并禁用

如何在python tkinter中使条目或输入字段中的文本变暗并禁用,python,tkinter,input,text,tkinter-entry,Python,Tkinter,Input,Text,Tkinter Entry,我试图使文本在背景中有点残废。但当我禁用文本时,用户也无法写入文本 这个问题已经有人问过了, 但这些答案对我来说并不清楚,也不令人满意。 所以我决定发布这个问题 我希望文本类似于大多数网站登录页面上的输入字段,其中一些文本如“用户名”或“密码”已写入输入字段 因此,文本应该有点模糊,当用户开始键入时,文本应该消失。因此,用户不应该能够复制它,也不需要在键入之前删除它 这是我试过的,但没用 from tkinter import * root = Tk() my_entry = Entry(ro

我试图使文本在背景中有点残废。但当我禁用文本时,用户也无法写入文本

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

我希望文本类似于大多数网站登录页面上的输入字段,其中一些文本如“用户名”或“密码”已写入输入字段

因此,文本应该有点模糊,当用户开始键入时,文本应该消失。因此,用户不应该能够复制它,也不需要在键入之前删除它

这是我试过的,但没用

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()
从tkinter导入*
root=Tk()
my_entry=条目(根,宽度=50)
my_entry.pack()
我的输入。插入(0,“输入您的姓名”)
my_entry.configure(状态=禁用)
单击时的def(事件):
my_entry.configure(状态=正常)
my_条目。删除(0,结束)
#使回调只工作一次
my_entry.unbind(“”,单击\u id)
单击时\u id=my\u entry.bind(“”,单击时)
root.mainloop()
作为一个班级:

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()
将tkinter作为tk导入
类DefaultEntry(tk.Entry):
def uuu init uuuuu(self,master=None,default_text='',**kw):
超级()
self.insert(0,默认文本)
self.configure(状态=tk.DISABLED)
self.on\u click\u id=self.bind(“”,self.on\u click)
单击(自身)时的def:
自我配置(状态=tk.NORMAL)
self.delete(0,tk.END)
#注销
自我解除绑定(“”,自我点击id)
root=tk.tk()
my_entry=DefaultEntry(根,宽度=50,默认文本='Enter your Name')
my_entry.pack()
root.mainloop()

欢迎来到SO。请改进您的措辞,以便用户愿意提供帮助。破解你的问题并不会增加帮助你解决问题的意愿。《全球<代码> ON-CLIKYLIDID/COD> >有点丑陋,考虑子类<代码>条目< /代码>。(我也喜欢将
tkinter作为tk
导入,以避免在没有注意到的情况下覆盖任何已经存在的名称。)我不明白,先生,“子类化”条目是什么意思。@DaniyalAhmad我的意思是使用
Entry
小部件并用您需要的逻辑扩展它。我把那个扩展类编辑成了我的答案。现在,您可以在任何需要具有该行为的条目的地方使用
DefaultEntry
。如果该条目获得焦点,则您的代码将无法工作,因为用户使用了tab键。@BryanOakley这是正确的,我假设OP将找到如何绑定他们喜欢的所有事件的方法,使用我的代码作为起点。