You are here

마우스 포인트 최근접해 있는 Tkpath의 ptext item의 tag를 알아내는 방법이 없을까요?

안녕하세요...

어제 siteboss님이 제가 원하던 CANVAS 위젯의 텍스트에 아웃라인 효과를 줄 수 있는 패키지 Tkpath를 알려주셔서 기쁜 마음에 기존 코드들을
수정을 했는데 두 가지 복병을 만났습니다.

한 가지는, Tkpath로 CANVAS 위에 ptext item을 만들었는데, 기존 CANVAS의 text item은 특정 좌표값에 근접한 것에 대해 아래와 같이 하면 해당 item의 id를 알아낼 수 있었습니다.
.c find closest 좌표값x 좌표값y

그런데, Tkpath의 ptext는 closest 명령이 적용되지 않습니다. 마우스 포인터 좌표에 근접한 특정 ptext를 드래그를 할려고
아래와 같이 작성했는데요. closest가 안 먹히니 드래그를 할 수가 없네요.

package require tkpath 0.3.0
set tw [toplevel .tile_win]
wm geometry $tw 512x512

set tkp::antialias 1
tkp::canvas $tw.c -width 512 -height 512
pack $tw.c

set poi4_pX 278
set poi4_pY 178
set poi4_name "TclTk"

$tw.c create group -tags poi
$tw.c create ptext $poi4_pX $poi4_pY -text $poi4_name -fontfamily "Malgun Gothic" -fontsize 50 -fill "#cabfa4" -stroke "white" -fillopacity 0.4 -strokewidth 1 -textanchor middle -parent poi -tags poi4

proc ClickItem { canvasW x y } {
        global selectedItem prevX prevY
        set prevX $x
        set prevY $y
        set selectedItem [lindex [$canvasW find closest $x $y] 0]

        puts $selectedItem

        if { [string first tile $selectedItem] < 0 } {
                $canvasW bind $selectedItem <B1-Motion> { MoveItem .tile_win.c %x %y }
                $canvasW bind $selectedItem <ButtonRelease-1> { puts [.tile_win.c coords $selectedItem] }
        }
}

proc MoveItem { canvasW x y } {
        global selectedItem prevX prevY
        set dx [expr $x - $prevX]
        set dy [expr $y - $prevY]
        $canvasW move $selectedItem $dx $dy
        set prevX $x
        set prevY $y
}

bind $tw.c <Button-1> { ClickItem .tile_win.c %x %y }

두 번째는 ptext의 font 관련해서 font-weitht (normal 이나 bold 설정), font-style (normal 이나 italic 설정)을
설정할 수 있는 방법이 없는지 입니다. 매뉴얼 doc을 훑고, 관련 사이트를 봐도 제대로 설명이 나와 있질
않네요. ptext 아이템은 폰트종류(-fontfamily)와 사이즈(-fontsize)만 설정할 수 있는 것인지... ㅠㅠ

그냥 text 아이템으로는 위 두 가지 문제가 없지만, 원래 원했던 아웃라인 효과를 꼼수를 써야하고 opacity 설정이 안되고,
ptext는 난관에 봉착했고... ㅠㅠ

관련해서 해결책 아시는 분 지식나눔 부탁드립니다. ^^

즐거운 주말 보내세요~