Разница между «ID» и «tag» с объектами Tkinter - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать в Python tkinter игру, которая включает в себя ракетный корабль и несколько астероидов.Проблема в том, что ракетный корабль состоит из нескольких фигур.Мне не нужен совет о том, как упростить форму ракеты, но если бы я мог получить указатели на использование изображений на холсте, это могло бы быть лучше.
В любом случае, я исследовал способы объединения нескольких фигур в однуформа или перемещение нескольких фигур одновременно.Это включало использование идентификаторов и тегов, и мне неясно, что мне следует использовать и почему.
Почему мне нужно перемещать несколько фигур одновременно?Ракетный корабль состоит из нескольких фигур, и он должен двигаться из стороны в сторону.Я действительно не хочу, чтобы куча self.canvas.move() методов загромождала мой код, поэтому, если кто-нибудь сможет мне помочь, я буду очень признателен.Заранее спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Обзор

Вы говорите об объектах Canvas.Каждый объект холста имеет уникальный целочисленный идентификатор.Никакие два объекта не могут иметь одинаковый идентификатор.Идентификатор присваивается tkinter и возвращается в ваш код при создании объекта.Этот идентификатор необходим, чтобы позже иметь возможность ссылаться на каждый отдельный объект.

С другой стороны, теги являются абсолютно произвольными (за исключением того, что они не могут быть последовательностью цифр) и присваиваются вами.Вы можете назначить один или несколько тегов для объекта (или без тегов для объекта), и несколько объектов могут использовать одни и те же теги.

Использование

Оба тега и идентификаторы могут использоваться многимиметодов холста, таких как move, bbox, coords и т. д.

Наиболее распространенное использование тегов - группирование нескольких объектов в один логический объект.У корабля может быть тело, несколько крыльев, может быть, другие части.Каждая из этих частей может иметь уникальный идентификатор, но вы можете назначить один и тот же тег всем частям, чтобы вы могли перемещать все части вместе в унисон.

Для конкретного примера, скажем, вы делаете корабль из прямоугольника для тела и двух треугольников для крыльев.У каждого будет уникальный идентификатор.Если вы хотите переместить эти три вместе, как если бы они были одним, вы можете присвоить каждому из них тег «ship-1».Если вы вызовете `canvas.move (" ship-1 ", 10, 0), все три из этих объектов будут перемещены на десять пикселей вправо.

Если вы создадите второй корабль, вы можете датьКусочки этого корабля с надписью «Корабль-2».Таким образом, вы можете перемещать только «корабль-1» или просто «корабль-2».Кроме того, если вы также назначите каждому из этих объектов тег «Корабль» в дополнение к их уникальному тегу «Корабль», то вы можете переместить все корабли одновременно.

Сделав еще один шаг вперед, скажем, вамимитируют космический бой.Половина кораблей - хорошие парни, а половина - плохие парни.Так что теперь, в дополнение к присвоению каждой части корабля метки «корабль-1», а также присвоению каждой части корабля метки «Корабль», вы также можете присвоить каждой части корабля метку «хорошо» или «bad "

Вариант использования

Имея все вышеперечисленное, вы можете сделать следующее:

  • переместить одну отдельную часть одного корабля с помощьюИдентификатор
  • Переместить все фигуры для первого корабля с «Корабль-1»
  • Переместить все фигуры для второго корабля с «Корабль-2»
  • Переместить все«хорошие» корабли вместе в строю с «хорошим»
  • перемещают все «плохие» корабли вместе в строю с «плохим»
  • перемещают все корабли, используя «Корабль»
  • перемещайте все с помощью специального тега «все», который автоматически относится ко всему на холсте.

И, конечно, вместо перемещения вы также можете изменить цвет любого из них или удалить всеиз объектов для любого из них, переместите объект или объекты поверх или под другими объектами (z-index), eдц.

...