Проблема Python с CTRL-V в виджете Tkinter Entry - PullRequest
0 голосов
/ 19 сентября 2018

В виджете «Ввод» я пытался ограничить значения шестнадцатеричными значениями, используя validatecommand и функцию, чтобы проверить, находится ли значение записи в «abcdef0123456789».Проблема заключается в том, что «CTRL + V» (вставка) не работает, когда я использую его для вставки значения.Нет проблем с «CTRL + C» и «CTRL + X» (Копировать и вырезать).

Это способ ограничить запись шестнадцатеричным значением и в то же время разрешить использование CTRL-VВставить / вставить значение?

1 Ответ

0 голосов
/ 20 сентября 2018

Это способ ограничить запись шестнадцатеричным значением и в то же время разрешить использование 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()
...