Как отменить проверку записи tkinter после удаления контента - PullRequest
0 голосов
/ 05 июня 2018

У меня есть несколько строк кода для проверки моего виджета entry, который работает нормально, но после удаления содержимого и повторной проверки он не работает. После удаления я могу набрать textне хочу, чтобы запись приняла.

from tkinter import *


def MoneyValidation(S):
    if S in ['0', '1', '2', '3', '4', '5']:
        return True
    root.bell()
    return False


def delete():
    vcmd_money2 = (root.register(MoneyValidation), '%S')
    e.config(invcmd="keys", vcmd=vcmd_money2)
    e.delete(0, END)
    e.delete(0, END)

    vcmd_money = (root.register(MoneyValidation), '%S')
    e.config(validate="key", vcmd=vcmd_money)




root = Tk()

vcmd_money = (root.register(MoneyValidation), '%S')
e = Entry(root, validate="key", vcmd=vcmd_money)
e.pack()

b = Button(text="DELETE", command=delete)
b.pack()

root.mainloop()

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вам не нужно вообще отключать проверку, если вы изменяете правило проверки, чтобы разрешить удаление нескольких символов одновременно.Если вы введете «123» и запустите e.delete(0, END) без отключения проверки, тогда значение S MoneyValidation будет «123».Если вы проверяете каждый символ S по отдельности, то вы можете разрешить такого рода многозначные изменения.

from tkinter import *


def MoneyValidation(S):
    if all(c in ['0', '1', '2', '3', '4', '5'] for c in S):
        return True
    root.bell()
    return False

def delete():
    e.delete(0, END)

root = Tk()

vcmd_money = (root.register(MoneyValidation), '%S')
e = Entry(root, validate="key", vcmd=vcmd_money)
e.pack()

b = Button(text="DELETE", command=delete)
b.pack()

root.mainloop()

В качестве дополнительного преимущества, при таком подходе пользователь может выделить часть своего номера и удалить его с помощьюклавиша возвратаЭто было бы невозможно, если бы вы сохранили MoneyValidation таким, какой он есть, и отключили проверку только во время вызова delete ().

0 голосов
/ 05 июня 2018

Я думаю, вы делаете этот путь сложнее, чем необходимо.Просто отключите проверку, удалите текст и снова включите проверку:

def delete():
    e.config(validate="none")
    e.delete(0, END)
    e.config(validate="key")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...