在条目小部件中,我尝试使用validatecommand
和一个函数将值限制为仅十六进制,以验证条目值是否在"abcdef0123456789"中。问题在于,当我使用它插入值时,"CTRL + V"(粘贴(不起作用。"CTRL+C"和"CTRL+X"(复制和剪切(没有问题。
这是一种将条目限制为十六进制值并同时允许使用 CTRL-V 粘贴/插入值的方法吗?
这是一种将条目限制为十六进制值并同时允许使用 CTRL-V 粘贴/插入值的方法吗?
是的。可以说,最简单的方法是使用validatecommand
来检查小部件中的所有字符是否都是十六进制数字。validatecommand
不关心如何输入字符(键入与剪切/粘贴(。
在以下示例中,如果允许编辑,'%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()