Problem bei Bild einbinden mit Tkinter

Fragen zu Tkinter.
Antworten
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Wie der Titel schon sagt, habe ein Problem beim Einbinden von Bildern mit Tkinter. Hab schon mehrere Threads zu dem Thema hier gelesen, dachte es müsste so funktionieren wie es ist. Fehler kommt keiner, das Fenster passt sich an die Bildgröße an, aber angezeigt wird das Bild einfach nicht.
Hab jetzt selber auch keine Ahnung mehr, warum das nicht geht...schon mal danke für Hilfe.
Teil-Quelltext:

Code: Alles auswählen

import Tkinter, os, ConfigParser

class Application(Tkinter.Frame):
    #--mehrere defs die ich zur kürzung ausgeschnitten habe
    def createWidgets(self):
        """Hauptwidgets"""
        menuBar=Tkinter.Menu(root)
        comMenu=Tkinter.Menu(root, tearoff=0)
        comMenu.add_command(label="Einstellungen", command=self.settings)
        comMenu.add_separator()
        comMenu.add_command(label="Beenden", command=self.quitApp)
        menuBar.add_cascade(label="Allgemein", menu=comMenu)
        setMenu=Tkinter.Menu(menuBar, tearoff=0)
        setMenu.add_command(label="Rasse", command=self.player)
        setMenu.add_command(label="Ressourcen", command=self.resources)
        setMenu.add_command(label="Gebäude", command=self.buildings)
        setMenu.add_command(label="Forschungen", command=self.research)
        setMenu.add_command(label="Einheiten", command=self.units)
        menuBar.add_cascade(label="Eingeben", menu=setMenu)
        calcMenu=Tkinter.Menu(menuBar, tearoff=0)
        calcMenu.add_command(label="Ressourcen zu Zeitpunkt", command=self.calcRes)
        calcMenu.add_command(label="Sammelzeit für Gebäude", command=self.calcBuilds)
        menuBar.add_cascade(label="Berechnen", menu=calcMenu)
        pic=Tkinter.PhotoImage(file="hgblau.gif")
        Tkinter.Label(self, image=pic).grid(row=1)
        root.config(menu=menuBar)
        
    def __init__(self, master=None):
        """Hauptframe"""
        Tkinter.Frame.__init__(self, master, width=800, height=600)
        self.grid()
        self.createWidgets()
        self.initConfig()

root = Tkinter.Tk()
root.title("Sarun Calc 0.1a")
root.minsize(200, 200)
root.maxsize(800, 600)
app = Application(master=root)
app.mainloop()
root.destroy()
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Mach aus der Variablen pic eine Klassenvariable self.pic. Habe es lokal mit einem eigenen Bild getestet, funktioniert.
Tkinter-Book hat geschrieben:Note: When a PhotoImage object is garbage-collected by Python (e.g. when you return from a function which stored an image in a local variable), the image is cleared even if it's being displayed by a Tkinter widget.

To avoid this, the program must keep an extra reference to the image object. A simple way to do this is to assign the image to a widget attribute, like this:

Code: Alles auswählen

label = Label(image=photo)
label.image = photo # keep a reference!
label.pack()
Siehe http://effbot.org/tkinterbook/photoimage.htm
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Interessant, muss ich mir merken. Danke!
Antworten