你能在一行中移动两个画布对象吗?

时间:2012-10-21 19:46:46

标签: python canvas refactoring

我正在尝试重构一些代码,以使其更易于管理和读者友好。我目前仍然坚持使用这个对我来说非常简单的巨大方法,我想知道我是否可以将其分解:

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并且编译器投入了适合,所以这是一个无赖。任何人都知道如何在同一时间内输入和减少多个值相同的数量?那将是超级酷豆。

2 个答案:

答案 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 ......}

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