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

ユーザーが矢印キーの1つを押すたびに同じ値を移動する、「円」と「テキスト」の2つのキャンバスオブジェクトがあります。変わるのは方向だけです(ええと)。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 に答える