【问题标题】:How to make text faint and disabled in an entry or input field in python tkinter [duplicate]如何在python tkinter的输入或输入字段中使文本模糊和禁用[重复]
【发布时间】:2019-11-10 11:21:33
【问题描述】:

我正在尝试在后台禁用文本。但是当我禁用它时,用户也不能写文本

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

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

所以文本应该有点模糊,当用户开始输入时,文本应该会消失。所以用户应该不能复制它,也不需要在输入之前将其删除。

这是我尝试过的,但没有成功。

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

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

【问题讨论】:

  • 欢迎来到 SO。请改进您的措辞,以便用户愿意提供帮助。解读您的问题并不会增加帮助您解决问题的意愿。

标签: python tkinter input text tkinter-entry


【解决方案1】:

这对你有帮助吗?

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

作为一个班级:

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

【讨论】:

  • @DaniyalAhmad 全局 on_click_id 有点丑,考虑子类化 Entry。 (我也更喜欢导入tkinter as tk,以免在不注意的情况下覆盖任何已经存在的名称。)
  • 我不明白先生,您所说的“子类化”条目是什么意思。
  • @DaniyalAhmad 我的意思是采用Entry 小部件并使用您需要的逻辑对其进行扩展。我将该扩展类编辑为我的答案。您现在可以在需要具有该行为的条目的任何地方使用DefaultEntry。
  • 如果条目获得焦点,您的代码将无法工作,因为用户使用了 Tab 键。
  • @BryanOakley 是正确的,我假设 OP 会以我的代码为起点弄清楚如何绑定他们喜欢的所有事件。
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 2013-02-27
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多