Bild in zweites Fenster

Fragen zu Tkinter.
Antworten
Keilhaub
User
Beiträge: 2
Registriert: Mittwoch 22. Juli 2020, 22:29

Hallo Leute,

ich programmiere gerade ein Rechentool im Bereich der Strömungsmechanik.
In meinem Hauptmenü habe ich ganz easy Bilder eingefügt.
In meinem Untermenü wird das selbe Bild allerdings nicht mehr angezeigt.
Ich habe es schon mit verschiedenen Bildern probiert.

Der Button funktioniert einwandfrei und deshalb schicke ich nur den Code innerhalb des Befehls mit.
Die Konstanten canvas_width und canvas_height habe ich bereits im Hauptmenü definiert.
Danke für eure Hilfe! :wink:

Code: Alles auswählen

def hydrostatik_action():
        tkFenster2 = Toplevel()
        tkFenster2.title('Hydrostatik Calculator')
        tkFenster2.geometry('500x500')

        p = Canvas(tkFenster2, width=canvas_width, height=canvas_height)
        p.pack()

        hydrostatik_label = Label(tkFenster2, text="Hydrostatik", font=('Arial', 30, 'underline'), foreground = 'green')
        hydrostatik_label.place(x = 150, y = 0)

        hydrostatikbild2 = PhotoImage(file='I:\\test.gif')
        p.create_image(205, 275, anchor=NW, image=hydrostatikbild2)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ein Klassiker. Ich wünschte manchmal wir hätten hier eine KI, die gleich antworten vorschlägt. Nix gegen dich, das Problem ist subtil & verwirrend! Es zum 1000sten mal erläutern nervt etwas ;)

Du musst eine Referenz auf das PhotoImage behalten. Sonst räumt der garbage collector von Python das ab, und es verschwindet.

Ein Weg ist zb

p.hydrostatikbild2

statt nur

hydrostatikbild2

zu benutzen. Dann ist es ein attribute des canvas, und wird am Leben erhalten.

Besser allerdings wäre der Umstieg auf Objekt orientierte Programmierung. Denn du hast da einen Wust aus globalen Variablen, der dir auf die Füße fallen wird.
Keilhaub
User
Beiträge: 2
Registriert: Mittwoch 22. Juli 2020, 22:29

Hat super funktioniert. Vielen Dank!
Antworten