tkinter Anfängerfrage bewegte Grafik

Fragen zu Tkinter.
Antworten
heax22
User
Beiträge: 1
Registriert: Sonntag 3. Oktober 2021, 11:34

Hallo. Ich beschäftige mich seit ein paar Wochen mit Python und bin nun bei tkinter angekommen.
Nun stehe ich vor dem Problem, dass ich eine GUI habe und möchte nur erreichen, dass sich ein grafisches Objekt entlang der x-Achse bewegt.
Jedoch scheitere ich an der mainloop() von tkinter. Ohne diese wird die GUI nicht angezeigt.
Jeglicher Code danach wird ja nicht ausgeführt ohne das die GUI geschlossen wird.

Daher meine Frage wie kann ich es realisieren, dass die Grafik über den Bildschirm läuft ohne einen Button platzieren zu müssen! Wenn ich einen Button anbringe und hier eine Funktion aufrufe, wäre das ja kein Problem. Aber in dem Fall soll die Grafik alleine bei Programmstart sich bewegen.

Hier mein aktuelles Code-Beispiel:

import tkinter as tk
import time
root = tk.Tk()

# Textausgabe erzeugen
label1 = tk.Label(root, text="Hallo Welt!",
fg="red",
bg="orange",
font=("times", 25, "bold", "italic"))
label1.place(x=1, y=1)

#Grafik einbetten
bild1 = tk.PhotoImage(file="biene.png")
label2 = tk.Label(root, image=bild1)
label2.place(x=1,y=100)


root.mainloop()



'''
for i in range(1,100):
label2.place(x=1,y=100)
time.sleep(0.5)
'''
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Es macht keinen Unterschied, ob Du die Animation per Button, oder gleich im Hauptprogramm startest. In beiden Fällen brauchst Du eine Funktion, die Du per `after` aufrufst, und die jeweils einen Animationsschritt macht und sich selbst wieder per `after` aufruft.
Was sollen die Nummern an den Variablennamen. Versuche sprechende Namen zu finden.

Code: Alles auswählen

import tkinter as tk

def animation(bild, x):
    bild.place(x=x, y=100)
    bild.after(100, animation, bild, x+1)

def main():
    root = tk.Tk()
    hallo_label = tk.Label(root, text="Hallo Welt!",
                            fg="red",
                            bg="orange",
                            font=("times", 25, "bold", "italic"))
    hallo_label.place(x=1, y=1)

    bild = tk.PhotoImage(file="biene.png")
    bild_label = tk.Label(root, image=bild)
    animation(bild_label, 1)
    root.mainloop()

if __name__ == "__main__":
    main()
Antworten