Seite 1 von 1

Ausgabe

Verfasst: Donnerstag 24. Juni 2010, 12:48
von Peak_me
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?

Re: Ausgabe

Verfasst: Donnerstag 24. Juni 2010, 13:13
von EyDu
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

Re: Ausgabe

Verfasst: Donnerstag 24. Juni 2010, 13:41
von Peak_me
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?

Re: Ausgabe

Verfasst: Donnerstag 24. Juni 2010, 14:01
von EyDu
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.

Re: Ausgabe

Verfasst: Freitag 25. Juni 2010, 10:39
von Peak_me
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.