2017-11-12 15 views
0

私はPythonで新しくなりました。私はキャンバス上で簡単なオブジェクトの動きを達成しようとしています。tkinterオブジェクトをキャンバスに移動

単純にX、Y座標を更新し、楕円を再描画することです。

座標を更新するたびにcanvas.update()を使用しようとしましたが、この方法では動作しません。

class character(): 
    x = 10 
    y = 10 
    color = "red" 
    canvas.create_oval(x, y, x + 40, y + 40, fill=color) 


def moveup(): 
    character.y -= 10 
def moveright(): 
    character.x += 10 
def movedown(): 
    character.y += 10 
def moveleft(): 
    character.x -= 10 


def choose(): 
    choosen_move = randint(0, 4) 

    if choosen_move == 0: 
     moveup() 
    elif choosen_move == 1: 
     moveright() 
    elif choosen_move == 2: 
     movedown() 
    elif choosen_move == 3: 
     moveleft() 

    print "%s | %s" % (character.x, character.y) 
    canvas.update() 
    sleep(1) 


while True: 
    choose() 
root.mainloop() 

答えて

3

代わりcharacter.x += 10またはcharacter.y -= 10の、あなたがmoveを使用する必要があります。

canvas.move(oval, 10, 0) # for x += 10 
canvas.move(oval, 0, -10) # for y -= 10 

残りは従わなければなりません。

Characterクラスの代わりに、oval = canvas.create_oval(x, y, x + 40, y + 40, fill=color)と言うことができます。

+0

感謝。私はこのアプローチを使用しようとしました。私はあなたがボタンをクリックするたびに実行される単純な機能を作った。できます。クリックするたびに楕円が10ずつ移動します。しかし、楕円を動かすためにループを使用しようとすると、最終位置に現れます。たとえば、範囲(5)のiの場合:canvas.move(oval、10、0)楕円+50を移動して表示します。 –

+0

この問題を解決しました。 root.after(2000、task)ありがとう –

1

**注:このコードはどれも動作しません。ここでは、操作方法に関するアイデアを提供するだけです。 :)

ボタンを押したときに画面の周りを移動するキーボードにオブジェクトがバインドされていました。

ループの代わりに、設定とバインドでオブジェクトのxとyを変更することができます。キーボードでleftを押すと、その物を動かすdefが実行されます。何かを結合する(またはもの)

def move_object_left()... 
    object.config(move left...) 

例:

*On_key_press('RIGHT'): 
    x_var = x_var + 5 
    object.config(x = x_var) 

entry.bind('<ButtonRelease-1>', lambda event: self.maximise_keyboard(event.widget)) 

= 5 y_var = 9

x_varは**ここでキーボードにオブジェクトをバインド

あなたは一度にたくさんのものを移動することができます...(あなたは自分でコードをやらなければなりませんが)

list_of_stuff = [ツリー、ブッシュ、カタツムリ]あなたの答えのための

for entry in list_of_stuff: 
     ... 
     **Get object X and Y of the object... 
     ** add a number to this X and Y... 
関連する問題