Tkinter Entry小部件中的CTRL-V的Python问题

时间:2018-09-19 19:21:41

标签: python tkinter hex tkinter-entry

在Entry小部件中,我尝试使用validatecommand和一个函数来将值限制为仅十六进制,以验证输入值是否在'abcdef0123456789'中。问题在于,当我使用“ CTRL + V”(粘贴)插入值时,它不起作用。 “ CTRL + C”和“ CTRL + X”(复制和剪切)没有问题。

这是一种将输入限制为十六进制值并且同时允许使用CTRL-V粘贴/插入值的方法吗?

1 个答案:

答案 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()