Tkinter条目小部件中CTRL-V出现Python问题
在Entry小部件中,我尝试使用Tkinter条目小部件中CTRL-V出现Python问题,python,tkinter,hex,tkinter-entry,Python,Tkinter,Hex,Tkinter Entry,在Entry小部件中,我尝试使用validatecommand和一个函数来验证输入值是否在'abcdef0123456789'中,将值限制为仅十六进制。问题在于,当我使用“CTRL+V”(粘贴)插入值时,“CTRL+V”(粘贴)不起作用。“CTRL+C”和“CTRL+X”(复制和剪切)没有问题 这是一种将输入限制为十六进制值并同时允许使用CTRL-V粘贴/插入值的方法吗 这是一种将输入限制为十六进制值并同时允许使用CTRL-V粘贴/插入值的方法吗 对。可以说,最简单的方法是使用validatec
validatecommand
和一个函数来验证输入值是否在'abcdef0123456789'中,将值限制为仅十六进制。问题在于,当我使用“CTRL+V”(粘贴)插入值时,“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()
非常感谢你的回答。