0

我试图在这里重构一些代码,使其更易于管理和阅读友好。我目前坚持使用这种对我来说似乎非常简单的巨大方法,我想看看我是否可以再分解它:

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 的实例变量在程序中用于对这个问题不重要的目的(你知道。我确实需要它们,并以这种方式递减)。我所希望的是一个神奇的self.canvas.move("circle" && "text", 0, 5)或类似的荒谬的东西。(显然,该命令不存在,但我想知道是否有更简洁的方法可以做到这一点,或者我只是发疯了)

作为记录,我也尝试过self.y1 = self.y2 -= 5,编译器抛出了一个错误,所以这很糟糕。任何人都知道如何同时减少和减少相同数量的多个值?那将是超级酷的豆子。

4

2 回答 2

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
于 2012-10-21T20:14:52.573 回答
0

您可以使用每个方向的单位向量定义字典。就像是:

uvs = {'right': 1,0, 'up': 0,-1...}

然后对于每次移动,获取要移动的每个元素的当前位置,添加单位向量(和所需的缩放比例),然后重新定位元素。

于 2012-10-21T20:08:51.927 回答