Sorry my fault
sorted_images = images lautet es in im programm. "" habe ich versehentlich von
Hand eingefügt , als mich mit den Formatierungen vertippt hatte.
Da mein Verzeichnis auch keine Umlaute oder Sonderzeichen enthält , kann ich die Fehler-
meldung eben nicht nachvollziehen.
Im Kopf des Programms lasse ich mir zur Kontrolle nochmals den Inhalt von IMAGE_PATH
ausdrucken.
Er lautet dann korrekt : 'fpad = C:/Python26/AVTGIF
Anzeige von 12 Bildern zyklisch erfolgen lassen
@wilhelmO: Die Fehlermeldung enthält keinen Pfad. Das impliziert das Arbeitsverzeichnis des Prozesses und nicht ``C:/Python26/AVTGIF``. Da steht ja nicht das ``C:/Python26/AVTGIF/AVT000000001.GIF`` nicht gefunden werden konnte. So einen Dateinamen versuchst Du auch gar nicht zu öffnen.
Hi wilhelmO
Hier das überarbeitete Skript:Da ich unter Linux arbeite und mir nicht deine Windows-Datei-Baumstruktur zur Verfügung stand habe ich den Bildpfad mit:auf mein Arbeitsverzeichnis gesetzt wo ich auch die Bilder für den Test abgelegt habe. So funktionier das einlesen der Bilddateien aus dem Arbeitsverzeichnis korrekt mit der Anweisung:
Dass es auchin deinem Fall funktioniert muss dein Bilderpfad:
noch mit dem Namen der Bilddatei wie folgt zusammengehängt werden:
Jetzt aber sollte dein Skript zum laufen kommen.
Gruß wuf
Hier das überarbeitete Skript:
Code: Alles auswählen
import Tkinter as tk
from PIL import Image, ImageTk
import os
ROWS = 3
COLUMNS = 4
TITLE = "TK 5 FormenScan"
#IMAGE_PATH = os.getcwd() # wuf's Pfad
IMAGE_PATH = "C:/Python26/AVTGIF/" # wilhelmO's Pfad
IMAGE_FORMAT_FILTER = ['.gif', '.png', '.GIF', '.PNG']
RESIZE_IMAGE_WIDTH = 48 #200
RESIZE_IMAGE_HEIGHT = 48 #130
DELAY = 1000
class Image_Viewer(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
self.pack()
self.bilder()
def bilder(self):
self.images = self.load_images()
for row, images in enumerate(self.images):
for column, image in enumerate(images):
self.label = tk.Label(self, image=image)
self.label.grid(row=row, column=column)
self.label.update() #_idletasks()
self.label.after(DELAY, None)
def load_images(self):
files = os.listdir(IMAGE_PATH)
images = list()
for file in files:
for image_format in IMAGE_FORMAT_FILTER:
if image_format in file:
images.append(file)
images = sorted(images,reverse=True)
sorted_images = list()
for row in xrange(ROWS):
row_list = list()
for column in xrange(COLUMNS):
try:
row_list.append(ImageTk.PhotoImage(Image.open(
os.path.join(IMAGE_PATH, images.pop())).resize(
(RESIZE_IMAGE_WIDTH, RESIZE_IMAGE_HEIGHT)
)))
except IndexError:
break
sorted_images.append(row_list)
return sorted_images
if __name__ == '__main__':
root = tk.Tk()
#root.update() #_idletasks()
root.title(TITLE)
image_viewer = Image_Viewer(root)
#image_viewer.pack()
root.mainloop()
Code: Alles auswählen
IMAGE_PATH = os.getcwd()
Code: Alles auswählen
row_list.append(ImageTk.PhotoImage(Image.open(
images.pop()).resize(
(RESIZE_IMAGE_WIDTH, RESIZE_IMAGE_HEIGHT)
)))
Code: Alles auswählen
IMAGE_PATH = "C:/Python26/AVTGIF/" # wilhelmO's Pfad
Code: Alles auswählen
row_list.append(ImageTk.PhotoImage(Image.open(
os.path.join(IMAGE_PATH, images.pop())).resize(
(RESIZE_IMAGE_WIDTH, RESIZE_IMAGE_HEIGHT)
)))
Gruß wuf
Take it easy Mates!
Hallo wuf
Vielen Dank für Überarbeitung !
Den IMAGE_PATH hatte ich schon abgeändert, da ich durch Kontrollausdruck des Pfades sah,
daß IMAGE_PATH = os.getcwd() mir das python-Installations und nicht mein Arbeitsverzeichnis
liefert.
Mit os.path.join wird python anscheinend auf das korrekte Verzeichnis hingewiesen , bzw.
das Verzeichnis wird hinzugefügt.
soweit sogut -- Programm meckert aber trotzdem -- folgende Fehlermeldung erhalte ich :
File "D:\Eclipse_Python\TK5\src\test15.py", line 56, in load_images
row_list.append(ImageTk.PhotoImage(Image.open(os.path.join(IMAGE_PATH,images.pop())).resize(RESIZE_IMAGE_WIDTH,RESIZE_IMAGE_HEIGHT)))
File "C:\Python26\Lib\site-packages\PIL\Image.py", line 1288, in resize
raise ValueError("unknown resampling filter")
ValueError: unknown resampling filter
Ich hab in PIL nachgesehen und finde keine Erklärung , da im.resize(size) auch ohne Filteran-
gabe genutzt werden. Wenn ich nun als dritten Parameter einen Filter hinzufüge wird mit
'unkown filter' gemeckert.
Nochmals das Programm , wie nun in eclipse vorhanden und gestartet :
Vielen Dank für Überarbeitung !
Den IMAGE_PATH hatte ich schon abgeändert, da ich durch Kontrollausdruck des Pfades sah,
daß IMAGE_PATH = os.getcwd() mir das python-Installations und nicht mein Arbeitsverzeichnis
liefert.
Mit os.path.join wird python anscheinend auf das korrekte Verzeichnis hingewiesen , bzw.
das Verzeichnis wird hinzugefügt.
soweit sogut -- Programm meckert aber trotzdem -- folgende Fehlermeldung erhalte ich :
File "D:\Eclipse_Python\TK5\src\test15.py", line 56, in load_images
row_list.append(ImageTk.PhotoImage(Image.open(os.path.join(IMAGE_PATH,images.pop())).resize(RESIZE_IMAGE_WIDTH,RESIZE_IMAGE_HEIGHT)))
File "C:\Python26\Lib\site-packages\PIL\Image.py", line 1288, in resize
raise ValueError("unknown resampling filter")
ValueError: unknown resampling filter
Ich hab in PIL nachgesehen und finde keine Erklärung , da im.resize(size) auch ohne Filteran-
gabe genutzt werden. Wenn ich nun als dritten Parameter einen Filter hinzufüge wird mit
'unkown filter' gemeckert.
Nochmals das Programm , wie nun in eclipse vorhanden und gestartet :
Code: Alles auswählen
import Tkinter as tk
from PIL import Image, ImageTk
import os
ROWS = 3
COLUMNS = 4
TITLE ="TK 5 Formenscan"
IMAGE_PATH = "C:\Python26\AVTGIF" #os.getcwd()
print 'fpad =',IMAGE_PATH
IMAGE_FORMAT_FILTER = ['.gif','.png','.GIF','.PNG']
RESIZE_IMAGE_WIDTH = 80
RESIZE_IMAGE_HEIGHT = 60
DELAY = 1000
class Image_Viewer(tk.Frame):
def __init__(self,root):
tk.Frame.__init__(self,root)
self.pack()
self.bilder()
print '1'
def bilder(self):
self.images = self.load_images()
for row , images in enumerate(self.images):
for column, image in enumerate(images):
self.label = tk.Label(self,image=image)
self.label.grid(row=row, column=column)
self.label.update()
self.label.after(DELAY,None)
print '2'
def load_images(self):
files = os.listdir(IMAGE_PATH)
print '3'
print 'files=',files
images = list()
for file in files:
for image_format in IMAGE_FORMAT_FILTER:
if image_format in file:
images.append(file)
print '4'
images = sorted(images,reverse=False)
print '5'
print'images nach sort',images
sorted_images = list()
print 'sortes_images=',sorted_images
for row in xrange(ROWS):
row_list = list()
for column in xrange(COLUMNS):
try:
row_list.append(ImageTk.PhotoImage(Image.open(os.path.join(IMAGE_PATH,images.pop())).resize(RESIZE_IMAGE_WIDTH,RESIZE_IMAGE_HEIGHT)))
except IndexError:
break
sorted_images.append(row_list)
return sorted_images
if __name__ == '__main__':
root = tk.Tk()
#root.update_idletasks()
root.title(TITLE)
image_viewer = Image_Viewer(root)
#image_viewer.pack()
root.mainloop()
Hallo wilhelmO !
Probiere mal diese Version.
Gruß Frank
Code: Alles auswählen
import Tkinter as tk
from PIL import Image, ImageTk
import os
ROW = 3
COLUMN = 4
TITLE = "TK 5 FormenScan"
IMAGE_PATH = "/home/kaytec/Dokumente/images/"
RESIZE_IMAGE_WIDTH = 250
RESIZE_IMAGE_HEIGHT = 130
UPDATE_TIME = 2000
class Image_Viewer(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
self.root = root
self.current_images = self.load_images()
self.labels = list()
for row, images in enumerate(self.current_images):
labels = list()
for column, (image, file_name) in enumerate(images):
label = tk.Label(self, image = image)
label.grid(row = column, column = row)
labels.append(label)
self.labels.append(labels)
def load_images(self):
images = sorted(os.listdir(IMAGE_PATH))
sorted_images = list()
for i in xrange(ROW):
l = list()
for i in xrange(COLUMN):
file_name = images.pop()
l.append((ImageTk.PhotoImage(Image.open("%s%s" %(IMAGE_PATH,
file_name)).resize((RESIZE_IMAGE_WIDTH,
RESIZE_IMAGE_HEIGHT))), file_name))
sorted_images.append(l)
return sorted_images
def update(self):
current_images = list()
self.new_images = self.load_images()
for cur_imgs, new_imgs, labels in zip(self.current_images,
self.new_images, self.labels):
image_row= list()
for cur_img, nw_img, label in zip(cur_imgs, new_imgs, labels):
current_img, current_file_name = cur_img
new_img, new_file_name = nw_img
if current_file_name != new_file_name:
label.config(image = new_img)
image_row.append(nw_img)
else:
image_row.append(cur_img)
current_images.append(image_row)
self.current_images = current_images
self.root.after(UPDATE_TIME, self.update)
if __name__ == '__main__':
root = tk.Tk()
image_viewer = Image_Viewer(root)
image_viewer.pack()
image_viewer.update()
root.title(TITLE)
root.mainloop()
Gruß Frank
Hi wilhelmO
In deinem Skript fehlt ein Klammernpaar. Die folgende Zeile:muss wie folgt aussehen:Ich würde veruchen die Funktionen weniger tief zu verschachteln. Eventuell in mehrere Zeilen unterteilen.
Gruß wuf
In deinem Skript fehlt ein Klammernpaar. Die folgende Zeile:
Code: Alles auswählen
row_list.append(ImageTk.PhotoImage(Image.open(os.path.join(IMAGE_PATH,images.pop())).resize(RESIZE_IMAGE_WIDTH,RESIZE_IMAGE_HEIGHT)))
Code: Alles auswählen
row_list.append(ImageTk.PhotoImage(Image.open(os.path.join(IMAGE_PATH, images.pop())).resize((RESIZE_IMAGE_WIDTH,RESIZE_IMAGE_HEIGHT))))
Gruß wuf
Take it easy Mates!
Guten Morgen wuf und vielen Dank !!
Programm funktioniert - Fehler war fehlendes Klammerpaar
In meinem Fall war der Fehler vor dem Monitor ( Klammerpaar übersehen ).
Nun habe zwei funktionierende Versionen ( erste von kaytec - nochmals vielen Dank ) , die
sich im Aufbau etwas unterscheiden. Werde bei noch eingehend untersuchen.
Allen Beteiligten wünsche ich ein schönes Wochenende und nochmals vielen Dank an
alle !
Programm funktioniert - Fehler war fehlendes Klammerpaar
In meinem Fall war der Fehler vor dem Monitor ( Klammerpaar übersehen ).
Nun habe zwei funktionierende Versionen ( erste von kaytec - nochmals vielen Dank ) , die
sich im Aufbau etwas unterscheiden. Werde bei noch eingehend untersuchen.
Allen Beteiligten wünsche ich ein schönes Wochenende und nochmals vielen Dank an
alle !