Image in Tkinter anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lordmyder

Mittwoch 17. September 2008, 12:08

Hallo,
ich weiß, dass diese Frage hier schon öfter getellt wurde, aber ich wurde aus den gegebenen Antworten nicht schlau, bzw. konnte sie nicht auf mein Problem anwenden.

Ich habe ein Script, dass normal länger und mehr als der Auszug den ich hier anstelle, aber mein Problem zeigt dieser Snippet schon voll und ganz.

Code: Alles auswählen

from Tkinter import Tk, Label, PhotoImage
import BmpImagePlugin
import Image
import ImageTk

def funktion():
    liste=[]
    bild=Image.open("bg.bmp")
    liste.append(bild)
    return liste

liste=funktion()
root=Tk()
lab=Label(root)
lab["image"] = ImageTk.PhotoImage(liste[0])
Ich will mehrere Bilder einlesen, bearbeiten, temporär ablegen und dann später anzeigen können.
So wie ich das machen möchte geht es leider nicht.
Kann mir jemand sagen, wie ich das Sctipt richtig schreibe?

Gruß,
LordMyder
BlackJack

Mittwoch 17. September 2008, 13:12

Drei Fehler: Es fehlt der Aufruf der Hauptschleife, das `Label` wird nicht mit einem Layoutmanager platziert, und man muss auf der "Pythonseite" eine Referenz auf das `PhotoImage`-Exemplar behalten solange es angezeigt werden soll, sonst wird der Speicher für das Bild wieder freigegeben und es wird nichts angezeigt.

`BmpImagePlugin` musst Du übrigens nicht importieren.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 17. September 2008, 13:12

Was genau ist denn nun das Problem?
Geht es dir - wie im Threadtitel ausgewiesen - nur um die Darstellung des bereits bearbeiteten Bildes oder um noch mehr?
lordmyder

Mittwoch 17. September 2008, 13:50

Es geht darum, dass ich sehr viele Bilder einlese und bearbeite.
Dann möchte ich aus dieser Liste bestimmte Bilder in Tkinter anzeigen, in etwa so wie ich es angedeutet habe.
Aber da kommt nur ein graues Fenster.
Ich weiß nicht wie Blackjack das meint:
man muss auf der "Pythonseite" eine Referenz auf das `PhotoImage`-Exemplar behalten
Ich habe das Script jetzt noch weiter vereinfacht, und es geht immer noch nicht...(konnte jedoch auch nichts an einem möglichen Fehler verändern, da ich nicht verstanden habe wie)

Code: Alles auswählen

from PIL import Image, ImageTk 
from Tkinter import Label,Tk, Button

bild=Image.open("bg.bmp")

root=Tk()
button=Button(root)
button.pack()

button["image"] = ImageTk.PhotoImage(bild)
Würde mich freuen, wenn ihr mir noch helfen könntet,

Gruß
LordMyder
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 17. September 2008, 14:07

Code: Alles auswählen

from PIL import Image, ImageTk
from Tkinter import Label,Tk, Button

root = Tk()
button = Button(root)
button.pack()

# Referenz
bild = ImageTk.PhotoImage(Image.open('bg.bmp'))
button["image"] = bild
root.mainloop()
MfG
HWK
lordmyder

Mittwoch 17. September 2008, 14:37

Danke!
Es hat zwar ne Weile gedauert, aber ich glaube jetzt habe ichs verstanden:-D
Antworten