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

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

作为记录,我还尝试了self.y1 = self.y2 -= 5,编译器抛出了一个fit,所以这是一个错误。有人知道如何在同一时间将多个值输入和递减相同的数量吗?那将是超级酷的豆子。


如果你把它分开可能会更容易些

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…

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