'ID' 和 'tag' 与 Tkinter 对象的区别
Difference Between 'ID' and 'tag' with Tkinter objects
我正在尝试在 Python tkinter 中创建一个涉及火箭飞船和一些小行星的游戏。问题是,火箭飞船是由多种形状组成的。我不需要关于如何简化火箭形状的建议,但如果我能得到有关在 canvas 中使用图像的指示,那可能会更好。
不管怎样,我正在研究如何将多个形状组合成一个形状,或者一次移动多个形状的方法。这涉及到 ID 和标签的使用,我不清楚我应该使用哪些以及为什么。
为什么我需要一次移动多个形状?火箭飞船由多种形状组成,需要左右移动。我真的不希望一堆 self.canvas.move()
方法弄乱我的代码,所以如果有人能帮助我,我将不胜感激。提前致谢!
概览
你说的是 canvas object。每个 canvas object 都有一个唯一的整数 ID。没有两个 object 可以有相同的 ID。 id 由 tkinter 分配并在您创建 object 时返回给您的代码。这个 id 是以后能够引用每个人所必需的 object。
另一方面,标签完全是任意的(除非它们不能是数字序列)并由您指定。您可以为 object 分配一个或多个标签(或没有标签给 object),并且多个 object 可以共享相同的标签。
用法
许多 canvas 方法都可以使用标签和 ID,例如 move
、bbox
、coords
等
标签最常见的用途是将多个 object 组合成一个逻辑 object。一艘船可能有 body、一些机翼,也许还有一些其他部件。这些部分中的每一个都可能有一个唯一的 ID,但是您可以为所有部分分配相同的标签,以便您可以将所有部分一起移动。
举个具体的例子,假设您用一个矩形 body 和两个三角形作为机翼来制作一艘船。每个人都有一个唯一的ID。如果你想把这三个一起移动,就好像它们是一个一样,你可以给它们每个都加上标签 "ship-1"。如果调用 `canvas.move("ship-1", 10, 0),所有这三个 object 都将向右移动十个像素。
如果您创建第二艘船,您可能会给该船的部件添加标签 "ship-2"。通过这种方式,您可以只移动 "ship-1" 或 "ship-2"。此外,如果除了它们独特的 "ship-" 标签之外,您还给每个 object 标签 "Ship",那么您可以一次移动所有船只。
更进一步,假设您正在模拟一场 space 战斗。一半的船是好人,一半是坏人。所以现在,除了给每艘船的标签"ship-1",也给每艘船的标签"Ship",你还可以给每艘船的标签[=62] =] 或 "bad"
Use-case
完成上述所有操作后,您现在可以执行以下操作:
- 使用 id
移动一艘船的一个单独部件
- 用"ship-1"
移动第一艘船的所有棋子
- 用"ship-2"
移动第二艘船的所有棋子
- 将所有 "good" 舰船与 "good"
一起编队
- 将所有 "bad" 舰船与 "bad"
一起编队
- 使用"Ship"
移动所有船只
- 移动带有特殊标签 "all" 的所有内容,它会自动引用 canvas.
上的所有内容
当然,除了移动之外,您还可以更改其中任何一个的颜色,或者删除其中任何一个的所有 object,移动 object 或 objects 在其他 objects (z-index) 之上或之下,等等
我正在尝试在 Python tkinter 中创建一个涉及火箭飞船和一些小行星的游戏。问题是,火箭飞船是由多种形状组成的。我不需要关于如何简化火箭形状的建议,但如果我能得到有关在 canvas 中使用图像的指示,那可能会更好。
不管怎样,我正在研究如何将多个形状组合成一个形状,或者一次移动多个形状的方法。这涉及到 ID 和标签的使用,我不清楚我应该使用哪些以及为什么。
为什么我需要一次移动多个形状?火箭飞船由多种形状组成,需要左右移动。我真的不希望一堆 self.canvas.move()
方法弄乱我的代码,所以如果有人能帮助我,我将不胜感激。提前致谢!
概览
你说的是 canvas object。每个 canvas object 都有一个唯一的整数 ID。没有两个 object 可以有相同的 ID。 id 由 tkinter 分配并在您创建 object 时返回给您的代码。这个 id 是以后能够引用每个人所必需的 object。
另一方面,标签完全是任意的(除非它们不能是数字序列)并由您指定。您可以为 object 分配一个或多个标签(或没有标签给 object),并且多个 object 可以共享相同的标签。
用法
许多 canvas 方法都可以使用标签和 ID,例如 move
、bbox
、coords
等
标签最常见的用途是将多个 object 组合成一个逻辑 object。一艘船可能有 body、一些机翼,也许还有一些其他部件。这些部分中的每一个都可能有一个唯一的 ID,但是您可以为所有部分分配相同的标签,以便您可以将所有部分一起移动。
举个具体的例子,假设您用一个矩形 body 和两个三角形作为机翼来制作一艘船。每个人都有一个唯一的ID。如果你想把这三个一起移动,就好像它们是一个一样,你可以给它们每个都加上标签 "ship-1"。如果调用 `canvas.move("ship-1", 10, 0),所有这三个 object 都将向右移动十个像素。
如果您创建第二艘船,您可能会给该船的部件添加标签 "ship-2"。通过这种方式,您可以只移动 "ship-1" 或 "ship-2"。此外,如果除了它们独特的 "ship-" 标签之外,您还给每个 object 标签 "Ship",那么您可以一次移动所有船只。
更进一步,假设您正在模拟一场 space 战斗。一半的船是好人,一半是坏人。所以现在,除了给每艘船的标签"ship-1",也给每艘船的标签"Ship",你还可以给每艘船的标签[=62] =] 或 "bad"
Use-case
完成上述所有操作后,您现在可以执行以下操作:
- 使用 id 移动一艘船的一个单独部件
- 用"ship-1" 移动第一艘船的所有棋子
- 用"ship-2" 移动第二艘船的所有棋子
- 将所有 "good" 舰船与 "good" 一起编队
- 将所有 "bad" 舰船与 "bad" 一起编队
- 使用"Ship" 移动所有船只
- 移动带有特殊标签 "all" 的所有内容,它会自动引用 canvas. 上的所有内容
当然,除了移动之外,您还可以更改其中任何一个的颜色,或者删除其中任何一个的所有 object,移动 object 或 objects 在其他 objects (z-index) 之上或之下,等等