すべての三角形を「三角形」、すべての四角形を「長方形」、すべての円を「円」とタグ付けします。 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%正確であることは保証されていませんが、
基本的な考え方は、すべてのオブジェクトの作成は、項目が作成されるたびに積み重ね順序を調整できる単一の機能を実行することです。そうすることで、それらのリフト/ロワーコマンドを1つの場所に追加するだけで済みます。
ブライアンありがとうございます。コード全体でこれらのステートメントを分散する必要はないと思っていましたが、単純な方法ではないようです。私は助けに感謝します! – Taugosz
@Taugosz:レイヤリングシステムを実装するために必要なものすべてをどのように持っているかを示すために答えを更新しました。組み込みのものは何もありませんが、独自のレイヤーを実装するにはわずかな想像力しか必要としません。 –
私は恥ずかしいです。私は早くそのような解決策を思いつきませんでした。私は確かに私が必要なツールを持っていた。あなたのポイントを説明するためにこのような完全なコードをまとめる時間がかかったことに非常に感謝しています。 – Taugosz