Привязка щелчка мышью к любому месту на холсте в Tcl Tk - PullRequest
1 голос
/ 23 октября 2011

Я хочу, чтобы мой холст выполнял действие при нажатии кнопки мыши в любом месте области холста.Я смог связать клик, но только когда он был сделан на существующем объекте:

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

Я пытался использовать ту же команду без указания тега:

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

Itвыдал ошибку.

И, дав вместо тега пустую строку:

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

, он действовал так, как будто я написал all.

Что tagдать так, чтобы он работал в любом месте холста, или как мне не указывать tag?

1 Ответ

4 голосов
/ 23 октября 2011

Метод Canvas bind позволяет связывать только элементы (и теги, применяемые к элементам), а затем только для подмножества всех событий Tk.Если вы хотите событие для всего холста - или для обнаружения других типов событий - используйте глобальную команду bind:

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

В качестве альтернативы, поместите полностью прозрачный прямоугольник (как -fill, так и * 1007).* установите пустую строку) под всеми остальными элементами и используйте это как поверхность последней инстанции.Таким образом, если ничто иное не подхватит щелчок, это будет.Или вы можете даже поместить такой прозрачный элемент поверх всего (в этом случае он будет перехватывать все события мыши) и делать это таким образом.Обратите внимание, что прямоугольники (и многоугольники, если вы хотите использовать непрямоугольные горячие области) особенным образом: большинство элементов не реагируют на части, которые вы не видите, но полностью прозрачные прямоугольники реагируют на всю их область.Это имеет всевозможных интересных применений.

(Иногда вы можете комбинировать нижележащий прямоугольник с другим элементом, например, элементом фонового изображения.)

...