Seite 1 von 1

Tk zeigt ein Bild nicht an

Verfasst: Donnerstag 8. Mai 2003, 15:26
von Maffa
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

Verfasst: Donnerstag 8. Mai 2003, 16:12
von Milan
Hi Marcus, benutz mal bitte das code-tag, dann bleiben die Einrückungen erhalten und der code wird lesbar/verständlich...

Milan

Verfasst: Mittwoch 4. Juni 2003, 12:05
von lbuega
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?

Verfasst: Mittwoch 4. Juni 2003, 15:58
von 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.

Verfasst: Donnerstag 5. Juni 2003, 10:32
von Voges
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

Verfasst: Donnerstag 5. Juni 2003, 14:27
von lbuega
:o Schiff versenkt! Volltreffer gelandet! Respekt!!! und ganz herzlichen Dank - jetzt sieht meine Applikation dank der vielen bunten Icons schon ziemlich professionell aus :-D