Пометьте все треугольники «треугольником», все прямоугольники «прямоугольником» и все круги «окружностью». Затем вы можете использовать метод lift
или lower
, чтобы поднять или опустить все треугольники, круги или прямоугольники одновременно. Это займет всего пару утверждений и произойдет в мгновение ока, даже если у вас есть тысячи предметов.
Поскольку вы спрашивали о встроенном механизме слоя: у tk такого нет, но его действительно легко добавить, все инструменты есть. Таким образом, вместо разбрызгивания команд lift
или lower
повсюду, все ваши рисунки проходят через специальную команду, которая обрабатывает наслоение для вас.
Например, вот пример команды, которая принимает номер слоя и удостоверяется, что все, что она рисует, находится на этом слое:
def add_to_layer(self, layer, command, coords, **kwargs):
layer_tag = "layer %s" % layer
if layer_tag not in self._layers: self._layers.append(layer_tag)
tags = kwargs.setdefault("tags", [])
tags.append(layer_tag)
item_id = command(coords, **kwargs)
self._adjust_layers()
return item_id
def _adjust_layers(self):
for layer in sorted(self._layers):
self.canvas.lift(layer)
Тогда вы бы назвали это так:
# draw a circle on layer 1:
self.add_to_layer(1, self.canvas.create_oval, (x0,y0,x1,y1), outline="red")
# draw a square on layer 2:
self.add_to_layer(2, self.canvas.create_rectangle, (x0,y0,x1,y1), fill="blue")
Есть много других способов сделать то же самое, вышеизложенное - просто быстрый и грязный пример с моей головы (и он не гарантирован на 100% правильный, но я думаю, что это иллюстрирует суть).
Основная идея состоит в том, что создание всех объектов проходит через одну функцию, которая может регулировать порядок наложения при каждом создании элемента. Таким образом, вам нужно только добавить эти команды подъема / опускания в одном месте.