Seite 1 von 1

Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 19:34
von dennbas
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

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 19:42
von Sirius3
@dennbas: ohne Code wird das schwierig zu raten, was Du denn falsch machst.

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 20:04
von dennbas

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()


Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 20:41
von __deets__
Du musst die after Methode verwenden. Wird hier permanent diskutiert, einfach mal in den Tkinter Themen der letzten Wochen stöbern.

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 21:04
von Sirius3
@__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.

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Dienstag 13. Februar 2018, 21:11
von __deets__
@Sirius3: ups. Ich hab nur die for Schleife gesehen.... na gut. Danke!

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Mittwoch 14. Februar 2018, 15:50
von dennbas
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

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Mittwoch 14. Februar 2018, 18:16
von dennbas
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.

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)

mit einem unschönen

Code: Alles auswählen

    global tkLAUF
    print str(tkLAUF.get())
bekomme ich immer den Wert des Dropdowns aus dem letzten Diealog, was irgendwie Sinn macht...

Re: Liste mit Bildern auf unterschiedliche Dialoge

Verfasst: Mittwoch 14. Februar 2018, 22:35
von dennbas
Konnte das Problem nun selbst lösen, war analog zu dem Bilderproblem.
Referenzen in ne Liste gepackt und darüber dann an die Werte gekommen.

Danke nochmal für die Hilfe.