📌  相关文章
📜  如何在 tkinter 中使特定文本不可删除?

📅  最后修改于: 2022-05-13 01:54:52.521000             🧑  作者: Mango

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

在本文中,我们将讨论如何在 Tkinter 中使特定文本不可移动。但在此之前,让我们知道 Tkinter 为我们提供了什么。

安装

要安装此模块,请在终端中键入以下命令。

pip install tk

Tkinter 中的条目验证操作

在继续使用不可移动文本语法之前,必须了解条目验证的工作原理。 validate 命令的任务是限制可以在 Entry 小部件中输入的文本。

Python3
import tkinter as tk
  
def text_only(entered_data):
    return entered_data.isalpha()
  
root = tk.Tk()
  
# the dimensions of the GUI window
root.geometry("300x300")
root.resizable(False, False)  # fixed size for GUI
  
# create a function and pass in register
# the function is to check the validation of Tkinter Box
valid = root.register(text_only), '%S'
entry_box = tk.Entry(validate="key", validatecommand=valid)
entry_box.pack()
  
# end GUI window with root.mainloop()
root.mainloop()


Python3
import tkinter as tk
  
def non_removable_text(text):
    
    # Enter Your Name is non-removable Text
    return text.startswith("Enter Your Name:")
  
root = tk.Tk()
root.geometry("300x300")
root.resizable(False, False)
  
# define a function with non-removable text
# '%P' denotes the value that the text will
# have if the change is allowed.
valid = root.register(non_removable_text), "%P"
  
# create a Entry widget with a validate of key
# key-specify keystroke
entry = tk.Entry(validate='key', validatecommand=(valid))
  
# add a message
entry.insert("end", "Enter Your Name:")
entry.place(x=0, y=100, width=300)
  
root.mainloop()


上述代码的特点是输入框只接受字母,即字母。如果您尝试输入数字或特殊字符,它不会接受。要带走的关键点是这两行代码。

valid = root.register(text_only),'%S'
entry_box = tk.Entry(validate="key", validatecommand=valid)

Valid 是分配给输入框的验证函数的变量。这意味着 root.register 将函数作为参数。 root.register()方法返回一个字符串(仅 alpha),该字符串分配给一个变量“有效”,该变量用于在输入框中触发击键时在后期调用回调函数。 validatecommand 选项中的“%S”表示插入或删除的字符作为参数传递给 text_only()函数。在 Entry 小部件中,我们将validate命令分配给key 。 “ key ”值指定每当任何击键(从键盘输入)更改小部件的内容时都会发生验证。现在,当在条目小部件上按下一个键时,将触发执行 text_only()函数操作的validatecommand

考虑到这个逻辑,让我们继续进行使文本不可移动的最后阶段。

Tkinter 中的不可移动文本

为了使特定文本不可移动,我们将创建一个条目小部件。在条目小部件中插入一条不可删除的消息,然后创建一个函数来检查条目小部件是否以该特定消息开头的条件。这个函数在 root.register 方法中作为参数传递。这次我们传递“ %P ”,它表示如果允许更改,文本将具有的值。条目小部件应与触发击键的验证命令一起传递。

例子:

Python3

import tkinter as tk
  
def non_removable_text(text):
    
    # Enter Your Name is non-removable Text
    return text.startswith("Enter Your Name:")
  
root = tk.Tk()
root.geometry("300x300")
root.resizable(False, False)
  
# define a function with non-removable text
# '%P' denotes the value that the text will
# have if the change is allowed.
valid = root.register(non_removable_text), "%P"
  
# create a Entry widget with a validate of key
# key-specify keystroke
entry = tk.Entry(validate='key', validatecommand=(valid))
  
# add a message
entry.insert("end", "Enter Your Name:")
entry.place(x=0, y=100, width=300)
  
root.mainloop()

输出: