TCL에서 entry
위젯의 입력 문자 수를 제한하려면 어떻게해야합니까?Tk 입력 위젯에서 입력 문자 수 제한
사용자가 텍스트를 입력 할 수있는 TCL 필드가 있습니다. 텍스트의 길이를 제한하고 싶습니다 (예 : 30 자 이하).
어떤 옵션이 있습니까?
TCL에서 entry
위젯의 입력 문자 수를 제한하려면 어떻게해야합니까?Tk 입력 위젯에서 입력 문자 수 제한
사용자가 텍스트를 입력 할 수있는 TCL 필드가 있습니다. 텍스트의 길이를 제한하고 싶습니다 (예 : 30 자 이하).
어떤 옵션이 있습니까?
입력 유효성 검사 콜백이 적용되며 %P
대체가 핵심입니다. the docs에서 :
%의 P
이 가고
항목의 값 편집이 허용됩니다. 입력 widget이 새 textvariable을 갖도록 구성하는 경우, 이는 해당 textvariable의 값입니다.pack [entry .e -width 50 -validate all -validatecommand { expr {[string length %P] <= 30} }]
, 당신은 그것의 길이는 ((30)를 통해 이동하게 위젯에 대한 편집 작업을 수행 할 수 없습니다 또한이에 가장 수 있습니다 :
이것은 우리가 그냥이 할 의미 사용자가 어떤 일이 발생했는지 알 수 있도록 -invalidcommand
사양을 추가하십시오.)
나는 일이 있다고 생각하지 않지만, 다음과 같이 항목 위젯에 검증을 사용할 수 있습니다
package require Tk
pack [entry .e -validate all -validatecommand {max_length %s 30 %d}]
proc max_length {val max act} {
if {[string length $val] >= $max && $act == 1} {
return 0
}
return 1
}
항목 상자가 각 항목을 확인하려고합니다, 현재 문자열 %s
과 전달 동작 %d
to proc
max_length
이 proc 내에서 길이와 동작을 확인합니다. 길이가 30보다 크고 동작이 1
(삽입을 의미)이면 proc은 0을 반환하여 더 이상 삽입을 중지합니다.
사용자가 첫 번째 문자를 클릭하고 이미 30자를 입력하면 어떻게됩니까? 29 자리에 40자를 붙이면 어떨까요? –
@ 브라이언 오클리 좋은 지적하고 고쳤습니다. – Jerry
@ 제리 : 고마워, 좋은 대답 :) +1 – user1336087
짧고 달콤한 해결책을 주셔서 감사합니다 :) +1 – user1336087