Tk zeigt ein Bild nicht an

Fragen zu Tkinter.
Antworten
Maffa
User
Beiträge: 13
Registriert: Donnerstag 5. September 2002, 09:20

Hellas!
Ich hab (mal wieder) ein Problem:

Ich versuche, mit Tkinter.PhotoImage(...), Tkinter.Label ein Bild in mein Frame reinzukriegen, aber es läuft nit... :cry:

Hier der Ausschnitt aus dem Programm:

Code: Alles auswählen

def karte(laenge1,breite1,laenge2,breite2,tk):
            l1 = 1.5 * (180 + laenge1) 
            d1 = 1.5 * (90 - breite1) -2
            l2 = 1.5 * (180 + laenge2) 
            d2 = 1.5 * (90 - breite2) -2
            d = abs(d1-d2)
            l = abs(l1-l2)
            d1 = int(d1)
            d2 = int(d2)
    
            if l > 270 or l == 270:
                l1 = Test1(l1)
                l2 = Test2(l2)
                l1 = int(l1)
                l2 = int(l2)
                dd1 = d1 + 1
                dd2 = d2 + 1
                ll1 = l1 + 1
                ll2 = l2 + 2
        
        
                im = Image.open("Erde.gif")

                k = im.rotate(0)
        
                draw = ImageDraw.Draw(k)
                draw.line([l1,d1,l2,d2], fill=1)
                draw.rectangle([l1,d1,ll1,dd1], fill=1)
                draw.rectangle([l2,d2,ll2,dd2], fill=1)
                del draw
                k.save("Gedreht.gif")

                [b]frame5=Tkinter.Frame(tk,relief = SUNKEN)
                frame5.pack(side=BOTTOM)
                image=Tkinter.PhotoImage(file="Normal.gif")
                label2=Tkinter.Label(frame5,image=image)
                label2.pack()[/b]
                
            else:
                l1 = int(l1)
                l2 = int(l2)
                dd1 = d1 + 1
                dd2 = d2 + 1
                ll1 = l1 + 1
                ll2 = l2 + 2
        
                im = Image.open("Erde.gif")
                print im.format, im.size, im.mode

                k = im.rotate(0)
        
                draw = ImageDraw.Draw(k)
                draw.line([l1,d1,l2,d2],fill=1)
                draw.rectangle([l1,d1,ll1,dd1], fill=1)
                draw.rectangle([l2,d2,ll2,dd2], fill=1)
                del draw
                k.save("Normal.gif")

                [b]frame5=Tkinter.Frame(tk,relief = SUNKEN)
                frame5.pack(side=BOTTOM)
                image=Tkinter.PhotoImage(file="Normal.gif")
                label2=Tkinter.Label(frame5,image=image)
                label2.pack()[/b]
                
      karte(laenge1,breite1,laenge2,breite2,tk)
MaRcUs
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi Marcus, benutz mal bitte das code-tag, dann bleiben die Einrückungen erhalten und der code wird lesbar/verständlich...

Milan
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

Hallo, habe ebenfalls das Problem, dass ein Bild auf einem Button nicht angezeigt wird wenn ich es in meinem Programm einbinde - alleine funktioniert es dagegen prima:

Code: Alles auswählen

from Tkinter import *
root=Tk()

def callback():
    print 'called the callback'

toolbar=Frame(root)
file = '/users/tmp/logo.gif'
image = PhotoImage(file=file)
b1 = Button(toolbar, image=image, command=callback)
b1.pack(side=LEFT, fill=BOTH)
toolbar.pack(fill=X, side=TOP)

root.mainloop()
Binde ich den Button mit dem Image in mein etwas größeres Programm ein, dann wird zwar die Größe noch erkannt (Button ändert sich entsprechend wenn ich die Grafikdatei ändere), die dazugehörende Grafik wird jedoch nicht angezeigt und gedrückt werden kann er auch nicht. Was könnte das Problem mit meinem Button sein?
Gast

Hab gelesen, dass für nicht standardmäßige Grafikimages Tkinter für die "Python Imaging Library" (PIL) konfiguriert sein muss.

Aber dann dürfte es ja eigentlich in beiden Fällen nicht bzw. müßte funktionieren.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo lbuega!
Tja, ohne Code nicht einfach. Schuss ins Blaue: Dein Image-Objekt 'stirbt' zu früh. Es muss nämlich zur gesamten Laufzeit verfügbar sein. Wenn Du die Initialisierung z.B. im Konstruktor einer Klasse vornimmst, dann am Besten das Image-Objekt als Membervariable vorhalten (self.image = PhotoImage(...)). Ansonsten ginge aber auch eine globale Variable.
hth
Jan
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

:o Schiff versenkt! Volltreffer gelandet! Respekt!!! und ganz herzlichen Dank - jetzt sieht meine Applikation dank der vielen bunten Icons schon ziemlich professionell aus :-D
Antworten