在Entry小部件中,我尝试使用validatecommand
和一个函数来将值限制为仅十六进制,以验证输入值是否在'abcdef0123456789'中。问题在于,当我使用“ CTRL + V”(粘贴)插入值时,它不起作用。 “ CTRL + C”和“ CTRL + X”(复制和剪切)没有问题。
这是一种将输入限制为十六进制值并且同时允许使用CTRL-V粘贴/插入值的方法吗?
答案 0 :(得分:0)
这是一种将输入限制为十六进制值并且同时允许使用CTRL-V粘贴/插入值的方法吗?
是的。可以说,最简单的方法是使用validatecommand
检查小部件中的所有字符都是十六进制数字。 validatecommand
不在乎如何输入字符(键入vs.剪切/粘贴)。
在以下示例中,'%P'
告诉tkinter如果允许编辑,则传递条目小部件的新值。然后,我们可以使用re
模块来查看新值是否仅由零个或多个十六进制数字组成。
import tkinter as tk
import re
def validate(possible_new_value):
if re.match(r'^[0-9a-fA-F]*$', possible_new_value):
return True
return False
root = tk.Tk()
entry = tk.Entry(root, validate="key",
validatecommand=(root.register(validate), '%P'))
entry.pack(padx=20, pady=20)
root.mainloop()