"ID"和"标签"与Tkinter对象之间的区别

Chr*_*ley 0 python tkinter python-3.x tkinter-canvas

我正在尝试在Python tkinter中创建一个涉及火箭飞船和一些小行星的游戏.问题是,火箭飞船由多种形状组成.我不需要关于如何简化火箭形状的建议,但如果我能在画布上使用图像的指针,那可能会更好.
无论如何,我正在研究如何将多个形状组合成单个形状或一次移动多个形状的方法.这涉及ID和标签的使用,我不清楚我应该使用哪些以及为什么.
为什么我需要一次移动多个形状?火箭飞船由多种形状组成,需要从一侧移动到另一侧.我真的不希望一堆self.canvas.move()方法弄乱我的代码,所以如果有人能帮助我,我会非常感激.提前致谢!

Bry*_*ley 6

概观

你说的是画布对象.每个canvas对象都有一个唯一的整数id.没有两个对象可以具有相同的ID.id由tkinter分配,并在您创建对象时返回到您的代码.此ID必须以后能够引用每个单独的对象.

另一方面,标签完全是任意的(除了它们不能是数字序列)并由您指定.您可以为对象分配一个或多个标记(或者不向对象分配标记),并且多个对象可以共享相同的标记.

用法

两个标签和ID可以由许多的画布的方法,如使用move,bbox,coords等.

标签的最常见用途是将多个对象组合到一个逻辑对象中.船可能有一个身体,一些翅膀,也许还有一些其他部分.这些部件中的每一个都可能具有唯一的ID,但您可以为所有部件分配相同的标签,以便您可以将所有部件一起移动到一起.

举一个具体的例子,假设你用一个矩形的船体和一个两个三角形的翅膀.每个人都有一个唯一的身份证.如果你想将这三个一起移动,就像它们是一个一样,你可以给它们每个标签"ship-1".如果你调用`canvas.move("ship-1",10,0),那么所有这三个对象都会向右移动10个像素.

如果您创建第二艘船,您可以为该船的部分标记"ship-2".通过这种方式,您可以只移动"ship-1"或只移动"ship-2".此外,如果您还为其中的每个对象添加了标签"Ship"以及其唯一的"ship-"标签,那么您可以立即移动所有船只.

更进一步,让我们说你正在模拟一场太空战.一半的船是好人,一半是坏人.所以现在,除了给船的每一块标记"ship-1",并且还给船的每一块标记"Ship",你还可以给船的每一块标记"好"或"坏"

用例

完成上述所有操作后,您现在可以执行以下操作:

  • 使用id移动一艘船的一个单独的一块
  • 用"ship-1"移动第一艘船的所有件
  • 用"ship-2"移动第二艘船的所有部件
  • 将所有"好"的船只与"好"组合在一起
  • 将所有"坏"船只与"坏"一起移动到一起
  • 用"船"移动所有船只
  • 使用特殊标记"all"移动所有内容,该标记自动引用画布上的所有内容.

当然,除了移动之外,您还可以更改其中任何一个的颜色,或删除其中任何一个的所有对象,在其他对象(z-index)之上或之下移动一个或多个对象等.