2011-10-23 3 views
1

캔버스 영역 어디에서나 마우스 버튼을 클릭하면 캔버스가 동작을 수행하게하고 싶습니다. 그것은 기존 개체에 만들어졌다 때만 내가 클릭을 결합 할 수 있었지만했습니다마우스 버튼 바인딩 Tcl Tk에서 캔버스의 아무 곳이나 클릭하십시오.

$this/zinc bind all <Button-1> [list select_shape $this] 

내가 태그를 지정하지 않고 동일한 명령을 사용하여 시도 :

$this/zinc bind <Button-1> [list select_shape $this] 

그것은 오류를했다.

대신 태그의 빈 문자열을 제공함으로써

: 나는이 all을 쓴 것처럼

$this/zinc bind "" <Button-1> [list select_shape $this] 

그것은 행동했다.

무엇을 tag 캔버스 어디에서나 사용할 수 있도록 제공합니까? 또는 tag을 지정하지 않으려면 어떻게해야합니까?

답변

4

캔버스의 bind 메서드는 항목 (및 항목에 적용된 태그)에만 바인딩 한 다음 모든 Tk 이벤트의 하위 집합에만 바인딩 할 수 있습니다. 당신은 전체 캔버스에 대한 이벤트를 원하는 경우에 - 또는 이벤트의 다른 유형을 감지 - 사용 글로벌 bind 명령 또는

bind $this/zinc <Button-1> {...} 

을, 아래에 완전히 투명 사각형 (빈 문자열로 모두 -fill-outline 세트)를 넣어 다른 모든 항목은 최후의 수단으로 사용합니다. 이와 같이 아무도 클릭을받지 않으면 그럴 것입니다. 또는 모든 항목 위에 투명 항목을 넣을 수도 있습니다 (이 경우 마우스 이벤트 인 마우스 이벤트가 가로 채어 표시됩니다). 직사각형 (직사각형 이외의 고온 영역을 원할 때 사용하는 사각형)은 특별한 방식으로 나타납니다. 대부분의 항목은 볼 수없는 부분에서 응답이 없지만 완전히 투명한 사각형은 전체 영역에서 반응합니다. 이것은 모든 종류의 흥미로운 사용의 있습니다.

은 (때때로 당신은. 다른 항목, 예를 들어, 배경 이미지 항목과 기본 사각형을 결합 할 수 있습니다)

+0

모르겠어요이 충고는 또한 아연 캔버스 모두에 적용되지만, 그것은 매우 아마 어느 정도까지 좋은. 캔버스 이벤트 모델은 꽤 정숙하고 Tk 코더 중에서 비교적 잘 알려져 있습니다. –

관련 문제