Ausgabe

Fragen zu Tkinter.
Antworten
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

huhu!

Folgendes Programmstück bereitet mir Probleme:

Code: Alles auswählen

b=list()      
for i in range(x):
    c=ImageTk.PhotoImage(file=pfad+a+".gif")
    b.append(c)
for i in range(y):
    canvas.create_image(d,e, image=b[i], anchor=NW)

z=Label(canvas, text=f, font="Courier 24")
z.place(x=g,y=h)
Es findet keine Interaktion mit dem Programm statt, es handelt sich um eine reine Ausgabe.
Da ich das Programm jedoch direkt außerhalb der Python-Programmierumgebung ausführe, und ich will, dass das ausgegebene Fenster nicht sofort wieder verschwindet, habe ich zum Schluss

Code: Alles auswählen

canvas.mainloop()
ergänzt.
Alles funktioniert wie gewünscht.

Doch nun möchte ich das gleiche Stück nochmals ausführen, jedoch haben die verschiedenen Variabeln andere Werte.
Dazu habe ich nun eine Definition erstellt:

Code: Alles auswählen

def ausgabe(a,b,bla,blub)
    b=list()
    for i in range(x):
        c=ImageTk.PhotoImage(file=pfad+a[i]+".gif")
        b.append(c)
    for i in range(y):
        canvas.create_image(d,e, image=b[i], anchor=NW)

    z=Label(canvas, text=f, font="Courier 24")
    z.place(x=g,y=h)
    canvas.mainloop()
Diese rufe ich mit

Code: Alles auswählen

ausgabe(a,b,bla,blub)
a=was anderes
b=auch was anderes
ausgabe(a,b,bla,blub)
auf.

Doch nun erscheint immer nur die Ausgabe, die die zweite Definition erstellt.
Ich vermute, dass dies passiert, da ich ja

Code: Alles auswählen

canvas.mainloop()
zweimal aufrufe.

Ich habe verschiedene Orte für

Code: Alles auswählen

canvas.mainloop()
ausprobiert.

Entweder taucht nur die erste Ausgabe oder die zweite oder garkeine auf.

Wo muss

Code: Alles auswählen

canvas.mainloop()
hin, damit die Ausgaben beider Definitionen sichtbar sind?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Du darfst "mainloop" nur einmal aufrufen. Damit übergibst du die Kontrolle deines Programms an die GUI und alles danach wird nicht mehr, bzw. erst nach dem schließen aller Fenster, ausgeführt. Vielleicht solltes du beschreiben, was du als ergebnis haben möchtest.

Sebastian
Das Leben ist wie ein Tennisball.
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Ich habe ja probiert, mainloop ganz am Ende des Programms aufzurufen. Doch dann erscheint die Ausgabe der ersten Definition nicht mehr.

Das Programm erstellt ein Fenster und ordnet darin verschiedene Bilder an.
Nun soll die Ausgabedefinition zweimal mit verschiendenen Werten ablaufen. Einmal sollen die Bilder in der Reihenfolge a angeordnet werden und danach in der Reihenfolge b.
Dazu rufe ich die gleiche Definition zweimal auf, verändere jedoch zwischen diesen beiden Aufrufe die entsprechenden Variabeln.
Das Endresultat soll dann das Fenster mit beiden Bildreihenfolgen sein; die Ausgaben beider Definitionen sollen sichtbar sein und nicht nur eine.
Es funktioniert weder, mainloop ans Ende der Definition zu schreiben, noch es ans Ende des Programms zu schreiben.

Wo muss es hin?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Peak_me hat geschrieben:Ich habe ja probiert, mainloop ganz am Ende des Programms aufzurufen. Doch dann erscheint die Ausgabe der ersten Definition nicht mehr.
Das ist doch auch kein Wunder, wenn du das erste Ergebnis sofort durch das zweite ersetzt. Du must dich schon selber darum kümmern, was "erst das eine danach das andere" bedeutet. Wenn du damit zeitlich meinst, dann benutze die after-Methode, andernfalls bereitet dir wahrscheinlich das "b = list()" Probleme.
Das Leben ist wie ein Tennisball.
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Ich will beides gleichzeitig haben!
Es läuft zweimal eine Definition ab, die Bilder in dem Fenster plaziert.
Danach will ich alle Bilder von beiden Definitionen im Fenster haben.
Doch entweder sind nur die Bilder der ersten Definition da oder nur die der zweiten.
Antworten