Сокращение ввода букв с помощью tkinter не работает - PullRequest
0 голосов
/ 17 октября 2018

Виджет ввода в моей программе для чисел работает правильно, чтобы разрешить максимум 3 числа, в то время как я пытался сделать то же самое в другом виджете ввода, но для символов ограничение не работает, у меня нетПонять почему.Вам нужно по-другому, так как вы используете буквы?

Вот мой код:

def only_letters_max_86(action, char):
if action == "1":
    # a character is inserted (deletion is 0) allow the insertion 
    # only if the inserted character char is a letter
    return char.isalpha() and len(char) <= 86
else:
    # allow deletion
    return True

def only_numbers_max_3(action, new_text):
if action == "1":
    return new_text.isdigit() and len(new_text) <= 3
else:
    return True


def main():

validate_letter = window.register(only_letters_max_86)
validate_nb = window.register(only_numbers_max_3)

label = Label(window, width = 30, background = 'lightgreen', text='enter temperature, only numbers')
label.grid(row=0, column=0)

entry_tempp = Entry(window, width = 30, validate="key", validatecommand=(validate_nb, '%d', '%P'))
entry_tempp.grid(row = 0, column = 1)

#create another label and entry object for location

label_numb = Label(window, width = 30, background = 'lightgreen', text='enter location, only letters')
label_numb.grid(row=1, column=0)

entry_locations = Entry(window, width = 30, validate="key", validatecommand=(validate_letter, '%d', '%S', '%v'))
entry_locations.grid(row = 1, column = 1)

1 Ответ

0 голосов
/ 17 октября 2018

В этой строке: entry_locations = Entry(window, width = 30, validate="key", validatecommand=(validate_letter, '%d', '%S', '%v'))

Вы передаете '%S' функции validate_letter, которая при просмотре документов означает:

'% S': есливызов был вызван вставкой или удалением, этот аргумент будет текстом, который вставляется или удаляется.

Так что я предполагаю, что char в only_letters_max_86(action, char) получает только вставляемый символкоторый всегда будет иметь длину один, в результате чего ваша проверка не пройдена.Попробуйте изменить %S на %P, что даст вам:

'% P': значение, которое будет иметь текст, если изменение разрешено.

Ссылкав документы: http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...