我正在尝试重构一些代码,以使其更易于管理和读者友好。我目前仍然坚持使用这个对我来说非常简单的巨大方法,我想知道我是否可以将其分解:
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
我有两个画布对象,“circle”和“text”,每次用户按下其中一个箭头键时都会移动相同的值。唯一改变的是方向(duh)。我的实例变量x1,x2,y1和y2在程序中用于对这个问题不重要的目的(只是你知道。我确实需要它们in-,并以这种方式递减)。我所希望的是一个神奇的self.canvas.move("circle" && "text", 0, 5)
或类似的荒谬。 (显然,该命令不存在,但我想知道是否有更简洁的方法来做到这一点,或者我是否只是疯了)
为了记录,我也尝试了self.y1 = self.y2 -= 5
并且编译器投入了适合,所以这是一个无赖。任何人都知道如何在同一时间内输入和减少多个值相同的数量?那将是超级酷豆。
答案 0 :(得分:1)
如果将其拆分可能会更容易管理
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
答案 1 :(得分:0)
您可以使用每个方向的单位向量定义字典。类似的东西:
uvs = {'right':1,0,'up':0,-1 ......}
然后,对于每个移动,获取要移动的每个元素的当前位置,添加单位向量(和所需的缩放),并重新定位元素。