Seite 1 von 1

Bild verschieben

Verfasst: Samstag 26. Dezember 2015, 18:21
von Morlon
Hi,
ich hab mit Tkinter ein Bild in einem Fentser eingefügt.
Nun will ich das Bild bewegen ohne es neu zu laden.
Also lediglich die x und y Koordinate ändern.
Bei Ruby ging das mit:
Beispiel.x += 1
Das geht aber iwie nicht...
Hoffe ihr könnt mir helfen=)
Wenn das nicht ohne neu Laden bei diesem Modul geht, wär ein alternativ Vorschlag wo es geht sehr nett=)

LG,
Morlon

Re: Bild verschieben

Verfasst: Samstag 26. Dezember 2015, 18:55
von BlackJack
@Morlon: Üblicherweise würde man dafür ein `Canvas` nehmen, sich die ID vom `create_image()`-Aufruf merken und dann die Koordinaten mit der `coords()`-Methode ändern.

Re: Bild verschieben

Verfasst: Samstag 26. Dezember 2015, 19:04
von Morlon
Wie genau funktioniert das?
Das ist mein Code:

Code: Alles auswählen

from tkinter import * 
root = Tk()
canvas_width = 300
canvas_height =300
canvas = Canvas(root, 
           width=canvas_width, 
           height=canvas_height)
canvas.pack() 
bild=PhotoImage(file=r"C:\Users\Admin1\Desktop\x.png")
bildLabel = canvas.create_image(20,20, anchor=NW, image=bild)

Re: Bild verschieben

Verfasst: Samstag 26. Dezember 2015, 19:51
von BlackJack
@Morlon:

Code: Alles auswählen

import tkinter as tk


def main():
    root = tk.Tk()
    canvas = tk.Canvas(root, width=300, height=300)
    canvas.pack()
    image = tk.PhotoImage(file='test.gif')
    image_id = canvas.create_image(20, 20, anchor=tk.NW, image=image)
    canvas.coords(image_id, 20, 30)
    root.mainloop()


if __name__ == '__main__':

    main()
Man sieht hier jetzt nur das Endergebnis weil das schon vor der Hauptschleife verschoben wird, aber um das ordentlich zu machen müsste man da etwas mehr Code schreiben und letztendlich wird man sich wenn das der Charakter aus Deinem anderen Beitrag werden soll, sowieso neben der Klasse für die Spielfeldanzeige auch eine schreiben welche die Charakteranzeige kapselt.

Re: Bild verschieben

Verfasst: Samstag 26. Dezember 2015, 20:00
von Morlon
Vielen Dank!