모든 삼각형에 "삼각형", 모든 사각형에 "사각형"및 모든 원에 "원"태그를 붙입니다. 그런 다음 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 % 정확함을 보장하지는 않지만 요점을 설명합니다).
기본 아이디어는 모든 개체 생성이 항목이 만들어 질 때마다 겹침 순서를 조정할 수있는 단일 기능을 수행한다는 것입니다. 그렇게하면 승강/하강 명령을 한 위치에 추가하기 만하면됩니다.
브라이언 감사합니다. 내 코드 전반에 걸쳐 이러한 진술을 분산시킬 필요가 없길 희망했지만 간단한 방법이없는 것처럼 보입니다. 도움에 감사드립니다! – Taugosz
@Taugosz : 레이어링 시스템을 구현하는 데 필요한 모든 방법을 보여주기 위해 필자의 대답을 업데이트했습니다. 내장 된 것은 없지만 자신의 겹침을 구현하는 데는 약간의 상상력 만 필요합니다. –
나는 일찍 그런 해결책을 생각해 내지 못했다. 나는 확실히 내가 필요한 도구들을 가지고 있었다. 귀하의 요점을 설명하기 위해 완전한 코드를 작성하는 데 시간을 할애 해 주셔서 감사드립니다. – Taugosz