Seltsames Laufverhalten Tkinter und PIL

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich beobachte gerad ein seltsames Verhalten eines Programmes. Dieses Programm habe ich zu Testzwecken schnell und völlig unstrukturiert zusammengekloppt. Aber es läuft!

    Der weitere Plan war, diesen Code ein wenig zu strukturieren:

    Das Programm läuft, aber sobald ich einen der Buttons klicke, verschwindet das aktuelle Image und lediglich ein leerer Bereich in der Größe des Bildes wird dargestellt.

    Starte ich das Programm mit dem Thonny Debugger, und steppe mich durch, dann wird sehr wohl das nächste Bild dargestellt. Ich vermute mal, das ist irgend ein Timing Problem, weiß aber nicht wirklich ob ich damit richtig liege.

    Ich hoffe, jemand kann mir hier eine Marschrichtung zur Lösung zeigen.

  • Hallo,

    auf die Schnelle würde ich mal folgendes versuchen.

    Importiere mal von 'functools' die Funktion 'partial' und dann:

    Code
    Button(root,text="<=",command=partial(step_backward,root,label,img,thumbs),height=5)

    Ansonsten solltest du anfangen auf 'global' zu verzichten und die mit objektorientierter Programmierung zu beschäftigen.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ansonsten solltest du anfangen auf 'global' zu verzichten und die mit objektorientierter Programmierung zu beschäftigen

    Mit dem Vorschlag stößt du offene Türen auf.

    Das angemeckerte 'global' war eine Relikt meiner Tests bei der Ursachenforschung. Ich war mir nicht sicher, wie 'pointer' als Parameter übergeben wurde, ob by value oder by reference. Leider hatte ich den Test mit einer globalen Variablen noch nicht rückgängig gemacht, bevor ich den code hier vergestellt hatte.

    vorher sah der code so aus:

    Code
    Button(root,text="<=",command=lambda:step_backward(root,label,img,thumbs,pointer),height=5)

    'partial' hat das Verhalten nicht verändert, der neue Code zeigt das gleiche Verhalten:

    Code
    Button(root,text="<=",command=partial(step_backward,root,label,img,thumbs,pointer),height=5)
  • Du brauchst die Referenzen zu den Bild-Objekten. Sobald eine Referenz nicht mehr erreichbar ist, wird diese gelöscht.

    Deswegen verschwinden die Bilder. Ich glaube, das Problem hat jeder mal gehabt.

    Hier deine veränderte Version:

    Das nochmal durch black und isort gejagt =>

    Das ändert aber nichts an dem global und dem * import. Eigentlich müsstest du hier schon über OOP nachdenken.

    So würde ich das machen:


    PS: Überall fehlt width. Das ist bei deinem Code abgeschnitten.

  • Danke allerseits für die schnelle Hilfe.

    @DeaD_EyE Die Klasse funktioniert klasse! :danke_ATDE::) Mein Darstellungsproblem kam wohl daher, dass ich in der Bilderliste Dateinamen hatte statt ImageTK.PhotoImage Objekte. Zumindest verstehe ich deinen Code so. Daran, dass ich nicht sofort eine Klasse sondern eher proceduralen code geschrieben habe muss ich noch nachbessern. War mir völlig klar, aber bisher hatte ich noch nicht die Zeit mich in die Syntax einzulesen. Mit Python beschäftige ich mich seit ca. 3 Wochen, da war die Zeit, um gleichzeitig alles zu lernen, halt etwas knapp. Zumal wenn man gleichzeitig noch ein paar andere Nebenbeschäftigungen hat.

    Mir ist auch noch nicht wirklich klar, was ich ändern muss um die Klasse ImageViewer später in eine andere App einzubinden, also dort zu importieren. Aber ich werde mich erstmal drauf stürzen und mich schlau lesen.

    Ich setze dean Thread auf erledigt

    Gruß

    Gunter

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!