Hallo zusammen,
ich habe eine Liste mit Bildern die ich jeweils auf einem Dialog platzieren will.
Also jedes Bild auf einem eigenen Dialog.
Das Ganze läuft in einer Schleife durch die Bildliste.
Nun ist das Problem, dass ich nur auf dem letzten Dialog ein Bild sehe.
Alle Dialoge davor haben kein Bild.
Zu dem Bild wird auf jedem Dialog auch noch Text ausgegeben, dieser erscheint ohne Problem.
Hat jemand eine Idee was ich falsch mache ?
Die Mainloop rufe ich am Ende der Schleife auf.
VG,
Dennis
Liste mit Bildern auf unterschiedliche Dialoge
Code: Alles auswählen
def make_label(master, x, y, w, h, img, *args, **kwargs):
f = Frame(master, height = h, width = w)
f.pack_propagate(0)
f.place(x = x, y = y)
label = Label(f, image = img, *args, **kwargs)
label.pack(fill = BOTH, expand = 1)
return label
AnzahlgleicheBilder = len(curPics)
for i in range(0,AnzahlgleicheBilder):
volleGroesseY = ((GetSystemMetrics(1) * 70)/100) - 40
volleGroesseX = GetSystemMetrics(0)
groesseY = volleGroesseY
groesseX = volleGroesseX / AnzahlgleicheBilder
#Einschraenkung der Bildgroesse
rechts30 = volleGroesseY - ((volleGroesseX * 30 ) /100)
dialogfenster=Toplevel()
DiaName = "Bild %i"%(i)
dialogfenster.title(DiaName)
#("170x200+30+30") "HxB+X+Y"
if i == 0:
reso = "%ix%i+%i+%i" % (groesseX,groesseY,0,0)
if i == 1:
reso = "%ix%i+%i+%i" % (groesseX,groesseY,groesseX,0)
if i == 2:
reso = "%ix%i+%i+%i" % (groesseX,groesseY,groesseX,groesseY/2)
if i == 3:
reso = "%ix%i+%i+%i" % (groesseX,groesseY,groesseX*2,groesseY/2)
dialogfenster.geometry(reso)
print curPics[i].filename
aktBild = ImageTk.PhotoImage(curPics[i].resize( (groesseY , groesseX) ) ) # aktuelles Bild
# (master, x, y, w, h, img, *args, **kwargs):
make_label(dialogfenster, 0, 0, groesseX , groesseY ,aktBild)
hauptfenster.mainloop()
@__deets__: das ist mal ausnahmsweise nicht dieses Problem, sondern das andere.
@dennbas: man muß immer eine Referenz auf die Bilder speichern, weil sonst der Speicher dafür wieder freigegeben wird. Über den Index einer Liste zu iterieren, ist ein Anti-Pattern, statt dessen benutz man enumerate. Die Einrückunge sind kaputt. rechts30 wird nicht benutzt. Alles, was sich nicht innerhalb der for-Schleife ändet, solltest Du davor berechnen.
@dennbas: man muß immer eine Referenz auf die Bilder speichern, weil sonst der Speicher dafür wieder freigegeben wird. Über den Index einer Liste zu iterieren, ist ein Anti-Pattern, statt dessen benutz man enumerate. Die Einrückunge sind kaputt. rechts30 wird nicht benutzt. Alles, was sich nicht innerhalb der for-Schleife ändet, solltest Du davor berechnen.
ah super, habe schon verzweifelt versucht den Zusammenhang zwischen meinem Problem und after() zu finden.
Dass "rechts30" nicht genutzt wird liegt daran, dass ich versucht habe alle "unnötigen" Zeilen zwecks Übersicht rauszunehmen.
Mit dem Speichern der Referenzen hat es nun geklappt.
Vielen Dank für die Hilfe und die Tipps
VG,
Dennis
Dass "rechts30" nicht genutzt wird liegt daran, dass ich versucht habe alle "unnötigen" Zeilen zwecks Übersicht rauszunehmen.
Mit dem Speichern der Referenzen hat es nun geklappt.
Vielen Dank für die Hilfe und die Tipps
VG,
Dennis
So leider habe ich noch ein weiteres Problem.
Auf jedem Dialog habe ich Dropdowns. Da die Dialoge in der For-Schleife laufen habe ich für jedes Dropdown die gleiche Variable.
Wie kann ich nun nachdem die Schleife durchgelaufen ist die Werte der einzelnen Dropdowns auslesen ?
Für jeden Dialog ne eigene Var geht ja auch nicht da es ja in der Schleife läuft ? Die Werte in der Schleife in einer Liste zu speichern geht auch nicht da die Werte ja erst beim Klick auf die Dropdowns gesetzt werden.
mit einem unschönen
bekomme ich immer den Wert des Dropdowns aus dem letzten Diealog, was irgendwie Sinn macht...
Auf jedem Dialog habe ich Dropdowns. Da die Dialoge in der For-Schleife laufen habe ich für jedes Dropdown die gleiche Variable.
Wie kann ich nun nachdem die Schleife durchgelaufen ist die Werte der einzelnen Dropdowns auslesen ?
Für jeden Dialog ne eigene Var geht ja auch nicht da es ja in der Schleife läuft ? Die Werte in der Schleife in einer Liste zu speichern geht auch nicht da die Werte ja erst beim Klick auf die Dropdowns gesetzt werden.
Code: Alles auswählen
tkGEB = StringVar(hauptfenster)
choicesGeb= [1,2,3,4,20]
for i,value in enumerate(curPics):
popGEB = OptionMenu(dialogfenster, tkGEB, *choicesGeb)
popGEB.place(x=PopX, y=Popy)
Code: Alles auswählen
global tkLAUF
print str(tkLAUF.get())