Tkinter Entry widget 中 CTRL-V 的 Python 问题



在条目小部件中,我尝试使用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()

最新更新