2017-11-12 29 views
0

Ich bin neu in Python. Ich versuche eine einfache Objektbewegung auf Leinwand zu erreichen.tkinter move Objekt auf Leinwand

Die Idee ist einfach X, Y-Koordinaten zu aktualisieren und das Oval neu zu zeichnen.

Ich habe versucht, canvas.update() jedes Mal zu verwenden, wenn ich Koordinaten aktualisiere, aber es funktioniert nicht so.

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() 

Antwort

3

Statt character.x += 10 oder character.y -= 10, müssen Sie move verwenden:

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

Der Rest folgen.

Anstelle einer Character Klasse können Sie einfach oval = canvas.create_oval(x, y, x + 40, y + 40, fill=color) sagen.

+0

Vielen Dank für Ihre Antwort. Ich habe versucht, diesen Ansatz zu verwenden. Ich habe eine einfache Funktion erstellt, die jedes Mal ausgeführt wird, wenn Sie auf die Schaltfläche klicken. Es klappt. Jedes Klicken bewegt das Oval um 10. Wenn ich jedoch versuche, eine Schleife zu verwenden, um das Oval zu bewegen, erscheint es an der endgültigen Position. Zum Beispiel für i in Bereich (5): canvas.move (oval, 10, 0) es bewegt das Oval +50 und zeigt dann –

+0

Ich löste dieses Problem. root.after (2000, Aufgabe) Danke –

1

** Bitte beachten Sie: keiner dieser Code wird funktionieren - es ist nur hier, um Ihnen Ideen zu geben, wie man Sachen macht. :)

Ich habe Objekte an die Tastatur gebunden, die sich um den Bildschirm bewegen, wenn Tasten gedrückt werden.

Anstelle einer Schleife können Sie einfach das x und y eines Objekts mit config und bind ändern ... wenn Sie links auf der Tastatur drücken, wird das def ausgeführt, was das Ding bewegt. (Oder Dinge)

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

Beispiel für die Bindung etwas:

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

x_var = 5 y_var = 9

** ein Objekt in die Tastatur hier binden:

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

Sie können eine Menge Sachen auf einmal verschieben, wenn Sie wollen ... (obwohl Sie den Code selbst tun müssen, lol)

list_of_stuff = [Baum, Busch, Schnecke]

for entry in list_of_stuff: 
     ... 
     **Get object X and Y of the object... 
     ** add a number to this X and Y...