Problem: Ich will die Bilder eines Ordners auslesen und in einem ListCtrl anzeigen lassen. Die Darstellung der Bilder im ListCtrl untereinander habe ich hinbekommen. Aber mit dem Darstellen der Bilder nebeneinander habe ich erhebliche Probleme. Der nachfolgende Quelltext läuft, aber ich bekomme keine Bilder angezeigt. Eine suche mit Google hat nur ein paar veraltete Beispiele hervorgezaubert, die aber syntaktisch nicht mehr stimmen. An der Farbraum Meldung kann es nicht liegen, weil wie gesagt die Bilder untereinander darzustellen einwandfrei funktioniert.
Hat jemand eine Ahnung woran es liegen könnte?
Mit Dank im voraus
Stephan Bayer
Code: Alles auswählen
import wx
import os
from PIL import Image
#----------------------------------------------------------------------------------
#
#----------------------------------------------------------------------------------
class ImageListCtrl(wx.ListCtrl):
def __init__(self, parent):
wx.ListCtrl.__init__(self, parent, style=wx.LC_ICON)
self.List = wx.ImageList(24, 24)
self.SetImageList(self.List, wx.IMAGE_LIST_SMALL)
#----------------------------------------------------------------------------------
# Konvertieung ist notwendig da einige Bilder
# probleme mit dem Farbraum haben.
# iCCP: known incorrect sRGB profile
#----------------------------------------------------------------------------------
def convertImage(self, fileName):
try:
with Image.open(fileName) as img:
img = img.convert('RGB')
image = wx.Image(img.size[0], img.size[1], img.tobytes())
image = image.Scale(24, 24)
return (True, wx.Bitmap(image))
except OSError:
return (False, None)
#----------------------------------------------------------------------------------
def addImages(self, imageDir):
fileList = os.listdir(imageDir)
for fileName in fileList:
if fileName.endswith('.jpg') or fileName.endswith('.png'):
(ok, image) = self.convertImage("{}\{}".format(imageDir, fileName))
if ok:
browserimg = self.List.Add(image)
i = self.InsertItem(browserimg, 0)
#self.SetItem(i, 1, fileName)
self.SetItemImage(i, browserimg)
#----------------------------------------------------------------------------------
#
#----------------------------------------------------------------------------------
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Bilder aus Ordner anzeigen')
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
self.imageListCtrl = ImageListCtrl(panel)
sizer.Add(self.imageListCtrl, 1, wx.ALL|wx.EXPAND, 5)
self.imageListCtrl.addImages(r'D:\Poser 11 Content\03 La Femme\Runtime\Textures\RPublishing\LaFemme')
panel.SetSizer(sizer)
self.Show()
app = wx.App()
frame = MainFrame()
app.MainLoop()