본문으로 바로가기

Tk의 태그(tag)

category 카테고리 없음 2024. 4. 22. 15:55

텍스트 위젯과 캔버스 위젯은, 위젯 안에 텍스트나 도형 등에 태그 이름을 붙일 수 있습니다. 태그 이름을 사용하여, 위젯 안에 배치시켰던 문자나 도형 등에 대해 바인드(bind)를 할 수 있습니다.

아래의 예는, 텍스트 위젯안의 Java, Tcl, C의 키워드에 대하여 태그를 붙이고, 그 키워드의 색을 변경하는 바인드를 하고 있습니다.

pack [text .t  -width 30 -height 7 -bg white]
.t insert end {
Java 기술 산·연 협력 지원 사업에 관한 연구,
C 언어 통합 플랫폼, 함수 구조,
배열과 문자열, 입출력 함수 수록. Tcl의 장점에 대한 나열...
}
 
set pos 1.0
while {1} {
        catch {.t search -count length -regexp "Java|Tcl|C" $pos end} pos
        if {$pos == ""} {
                break
        }
        .t tag add foo $pos "$pos + $length char"
        set pos [.t index "$pos + $length char"]
}
 
.t tag configure foo -background blue -foreground white
 
.t tag bind foo <Enter> {
        %W tag configure foo -background red
}
 
.t tag bind foo <Leave> {
        %W tag configure foo -background blue
}


다음의 예는, 캔바스 위젯 안의 도형에 대하여 태그를 붙이고, 그 도형 윤곽의 색을 변경하는 바인드를 하고 있습니다.

pack [canvas .c -height 70 -width 70 -bg white]
.c create oval 10 10 40 40 -fill red -width 4 -tag foo
.c create oval 30 10 60 40 -fill green -width 4 -tag foo
.c create oval 20 30 50 60 -fill blue -width 4 -tag foo
 
.c bind foo <Enter> {
        %W itemconfigure foo -outline gold
}
 
.c bind foo <Leave> {
        %W itemconfigure foo -outline black
}

 

태그의 이름을 붙일 때 주의 할 점은, 캔버스 위젯의 all이라는 태그 이름은 모든 태그를 가르키기 위해 예약된 태그 이름으로 사용이 불가능합니다. 단 텍스트 위젯에서는 예약되어 있지 않으므로 사용가능합니다.