gif drehen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

Hallo,
kann mir jemand erklären wie ich ein gif zum drehen bringe
Vielen Dank für Eure Hilfe. Zeile 18 und 19 sind die Problemzeilen

import tkinter as tk
from PIL import Image
from PIL import ImageTk

def main():
fenster=tk.Tk()
fenster.geometry("350x455")

canvas_obj=tk.Canvas(fenster,width=250,height=250)
canvas_obj.place(x=10, y=20)
canvas_obj.config(bg="yellow")

image=Image.open('c:\\temp\P3.gif')
tkimage=ImageTk.PhotoImage(image.rotate(0))
canvas_obj=canvas_obj.create_image(80,80,image=tkimage)

#tkimage=ImageTk.PhotoImage(image.rotate(90))
#canvas_obj=canvas_obj.create_image(70,70,image=tkimage)

fenster.mainloop()

if __name__ == "__main__":
main()
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst dir das rotierte Bild merken. Nicht das "normale". Sonst verliert das PhotoImage die Referenz darauf. Also das rotate gleich auf das geladene Bild anwenden.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kobra23759: Jetzt hast Du schon wieder/immer noch `geometry()` und `place()` im Programm.

Es macht ausserdem keinen Sinn `_obj` an Namen zu hängen. In Python ist *alles* ein Objekt was man an einen Namen binden kann, womit dieser Namenszusatz so überhaupt gar nichts aussagt.

Man bindet innerhalb eines Sichtbarkeitsbereichs auch keine Werte mit unterschiedlichen (Duck-)Typen an den gleichen Namen. Also nicht mal ein `Canvas`-Objekt und danach dann eine Zeichenkette mit einer ID von etwas das auf dem Canvas-Objekt erstellt wurde.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

Lieber blackjack,
das .place habe ich ersetzt. kannst du den letzten Absatz noch mal erläutern?

Hallo,
leider funktioniert das Prog nicht wie gewollt. ich möchte das Rotieren vieleicht auch in eine Schleife packen.
Außerdem kann ich das gif auch nicht loöschen. Vielleicht hast du noch ein paar Tipps

import tkinter as tk
from PIL import Image
from PIL import ImageTk

def main():
fenster=tk.Tk()
fenster.geometry("350x455")

canvas=tk.Canvas(fenster,width=250,height=250)
canvas.pack()
canvas.config(bg="yellow")

image=Image.open('c:\\temp\P3.gif')
tkimage=ImageTk.PhotoImage(image.rotate(0))
canvas=canvas.create_image(80,80,image=tkimage)

tkimage1=ImageTk.PhotoImage(image.rotate(90))
#canvas=canvas.create_image(70,70,image=tkimage1)

fenster.mainloop()

if __name__ == "__main__":
main()
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du bindest den Rueckgabewert von create_image wieder an den Namen canvas. Warum? Hast du mal in der Dokumentation gelesen, was der ist? Das wird auch Klarheit ueber die zweite Frage geben.
Antworten