Can you move two canvas objects in one line?
我在这里尝试重构一些代码,以使其更易于管理和读者友好。目前,我一直在坚持这个对我来说非常简单的巨大方法,我想看看我是否能再把它分解掉:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def moveCircle(self, event): if event.keysym =="Up": self.canvas.move("circle", 0, -5) self.canvas.move("text", 0, -5) self.y1 -= 5 self.y2 -= 5 elif event.keysym =="Down": self.canvas.move("circle", 0, 5) self.canvas.move("text", 0, 5) self.y1 += 5 self.y2 += 5 elif event.keysym =="Left": self.canvas.move("circle", -5, 0) self.canvas.move("text", -5, 0) self.x1 -= 5 self.x2 -= 5 elif event.keysym =="Right": self.canvas.move("circle", 5, 0) self.canvas.move("text", 5, 0) self.x1 += 5 self.x2 += 5 self.canvas.update |
我有两个画布对象,"圆形"和"文本",每次用户按一个箭头键时,它们移动相同的值。唯一改变的是方向(duh)。我的x1、x2、y1和y2实例变量在程序中用于这个问题不重要的目的(正如您所知道的那样)。我确实需要它们,而且是这样颁布的)。我所希望的是一个神奇的
作为记录,我还尝试了
型
如果你把它分开可能会更容易些
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def moveCircle(self, event): dif = { "Up":(0,-5), "Down":(0,5), "Left":(-5,0), "Right":(5,0), } self.moveCanvas(*(dif[event.keysym])) self.canvas.update def moveCanvas(self, xdif, ydif): self.canvas.move("circle", xdif, ydif) self.canvas.move("text", xdif, ydif) self.x1 += xdif self.x2 += xdif self.y1 += ydif self.y2 += ydif |
型
您可以使用每个方向的单位向量定义字典。比如:
uvs='右':1,0,'向上':0,-1…
然后,对于每个移动,获取要移动的每个元素的当前位置,添加单位向量(和所需的缩放比例),然后重新定位元素。