如何在 tkinter 中使特定文本不可删除?

kre*_*ter 3 tkinter python-3.x

我有一个关于 Tkinter Text 和 Entry 小部件的快速问题。如何使特定文本不可删除?是的,我知道.config(state="disabled"),不,这不是我想要的,它只会使所有文本不可移动。

假设我有一个文本框。在该文本框中有一个“输入消息”文本。用户可以像任何其他文本框一样键入和删除。但是,我不希望用户删除“输入消息”。

就像在 Windows shell 中一样,您无法删除“C:\Users\your username>”或您所在的任何目录。

这是一些代码:

from tkinter import *

root = Tk()
root.geometry("500x500")
entry = Entry(root, bg="black", fg="white")
entry.pack(side="top", fill="x")
entry.insert(END, "Enter message: ")
entry.non_removable("Enter message: ") # << not a real code. just what i imagine it to be

mainloop()
Run Code Online (Sandbox Code Playgroud)

Tls*_*ris 5

另一种方法是使用验证。

def do_validate( text ):
    # if this returns False the entered key(s) aren't accepted.
    return text.startswith( "Enter message: " )

import tkinter as tk

root = tk.Tk()
root.geometry("500x500")
entry = tk.Entry(root, bg="black", fg="white")
entry.pack(side="top", fill="x")
entry.insert( tk.END, "Enter message: ")

validate_cmd = ( root.register( do_validate ), '%P' )
entry.config( validate = 'key', validatecommand = validate_cmd )

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

如果击键创建的字符串不是以“Enter Message:”开头,则击键将被拒绝,条目文本保持不变。