2014-10-10 4 views
2

TCL에서 entry 위젯의 입력 문자 수를 제한하려면 어떻게해야합니까?Tk 입력 위젯에서 입력 문자 수 제한

사용자가 텍스트를 입력 할 수있는 TCL 필드가 있습니다. 텍스트의 길이를 제한하고 싶습니다 (예 : 30 자 이하).

어떤 옵션이 있습니까?

답변

4

입력 유효성 검사 콜백이 적용되며 %P 대체가 핵심입니다. the docs에서 :

%의 P
항목의 값 편집이 허용됩니다. 입력 widget이 새 textvariable을 갖도록 구성하는 경우, 이는 해당 textvariable의 값입니다.

이 가고
pack [entry .e -width 50 -validate all -validatecommand { 
    expr {[string length %P] <= 30} 
}] 

, 당신은 그것의 길이는 ((30)를 통해 이동하게 위젯에 대한 편집 작업을 수행 할 수 없습니다 또한이에 가장 수 있습니다 :

이것은 우리가 그냥이 할 의미 사용자가 어떤 일이 발생했는지 알 수 있도록 -invalidcommand 사양을 추가하십시오.)

+1

짧고 달콤한 해결책을 주셔서 감사합니다 :) +1 – user1336087

2

나는 일이 있다고 생각하지 않지만, 다음과 같이 항목 위젯에 검증을 사용할 수 있습니다

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 procmax_length

이 proc 내에서 길이와 동작을 확인합니다. 길이가 30보다 크고 동작이 1 (삽입을 의미)이면 proc은 0을 반환하여 더 이상 삽입을 중지합니다.

+0

사용자가 첫 번째 문자를 클릭하고 이미 30자를 입력하면 어떻게됩니까? 29 자리에 40자를 붙이면 어떨까요? –

+0

@ 브라이언 오클리 좋은 지적하고 고쳤습니다. – Jerry

+0

@ 제리 : 고마워, 좋은 대답 :) +1 – user1336087