Принудительно вводить прописные буквы в поле ввода Tcl / Tk - PullRequest
4 голосов
/ 15 февраля 2010

У меня есть окно Tcl / Tk с полем ввода, в котором я хотел бы принудительно вводить символы в верхнем регистре. То есть, если набираются какие-либо буквы, я бы хотел, чтобы они отображались в верхнем регистре в поле ввода, а не просто отклоняли любой ввод строчных букв.

Я посмотрел документацию для entry и страницу Entry Validation на вики Tcl / Tk, но я не должен искать в правильном месте, потому что, хотя есть много примеров проверки, я не могу найти пример фильтрации ввода ключа для изменения регистра.

Самое близкое, что я смог получить, это что-то вроде следующего:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    return 0
}

Это заставляет первый первый символ, набранный в верхнем регистре, но последующие символы не переводятся. Фактически, скрипт проверки не вызывается вообще после первого символа. Если я опускаю команду .message insert для тестирования, для каждого символа вызывается скрипт проверки.

Ответы [ 2 ]

5 голосов
/ 15 февраля 2010

Если вы задали новое значение для своей записи в вашей команде проверки, проверка отключится (предположительно, чтобы предотвратить бесконечный цикл). Однако вы можете включить его потом:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    .message configure -validate key
    return 0
}
1 голос
/ 15 февраля 2010

В качестве альтернативы вы можете использовать события и привязки:

entry .message
bind .message <KeyRelease> {
    set v [string toupper [.message get]]
    .message delete 0 end
    .message insert 0 $v
    }

pack .message

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

...