Теги объектов в виджете Canvas

tegi obektov v vidzhete canvas Экскурсия по tkinter, часть 2

Однако холсты способны предложить еще более мощные возможности, чем мы видели до сих пор. Помимо идентификаторов объектов существуют теги. Тег — создаваемое программистом имя, с которым можно связать ряд отображаемых объектов и применить ту или иную операцию сразу ко всей группе. Пометка объектов тегами в виджете Canvas по крайней мере по духу сходна с пометкой тегами подстрок в виджете Text, рассматривавшемся в предшествующем разделе. В общих чертах методы холста принимают идентификатор отдельного объекта или имя тега. Например, можно переместить целую группу отображаемых объектов, привязав их к одному и тому же тегу и передав его методу move холста. Именно по этой причине метод move принимает смещения, а не координаты — получая тег, он перемещает каждый ассоциированный с этим тегом объект на указанные смещения (X,Y); если бы метод принимал абсолютные координаты, все связанные с тегом объекты могли бы оказаться в одном и том же месте друг над другом.

Чтобы связать объект с тегом, нужно указать имя тега в параметре tag метода, отображающего объект, или вызвать метод холста addtag_ withtag(tag, objectIdOrTag) (или родственный ему). Например:

canvas.create_oval(x1, y1, x2, y2, fill=’red’, tag=’bubbles’) canvas.create_oval(x3, y3, x4, y4, fill=’red’, tag=’bubbles’) objectId = canvas.create_oval(x5, y5, x6, y6, fill=’red’) canvas.addtag_withtag(‘bubbles’, objectId) canvas.move(‘bubbles’, diffx, diffy)

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

Как и виджет Text, виджет Canvas имеет теги с предопределенными именами: тег all ссылается на все объекты, имеющиеся на холсте, а current ссылается на тот объект, который находится под указателем мыши. Можно не только запрашивать идентификатор объекта под указателем мыши, но и осуществлять поиск объектов с помощью методов find_ холста: например, метод canvas.find_closest(X,Y) возвращает кортеж, первый элемент которого содержит идентификатор объекта, находящегося ближе всего к точке с указанными координатами, — это удобно, когда уже есть координаты, полученные в обработчике события, сгенерированного щелчком мыши.

К представлению о тегах холста мы вернемся снова в более позднем примере из этой главы (если вам нужны подробности прямо сейчас, можете посмотреть сценарии воспроизведения анимации ближе к концу). Холсты поддерживают другие операции и параметры, для рассказа о которых здесь недостаточно места (например, метод холста postscript позволяет сохранить холст в файле в формате PostScript). Дополнительные сведения можно найти в примерах, имеющихся далее в книге, таких как PyDraw, а полный список параметров объекта холста можно найти в справочниках по библиотеке Tk или tkinter.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий