In PIL, how to display multiple images in say m rows and n colums when
I have m*n images.
suresh
Sounds like a good project to learn PIL with.
~Sean
Tkinter has PhotoImage widget and PIL has support for this widget:
http://www.pythonware.com/library/pil/handbook/imagetk.htm
Maybe I've misunderstood something (in that case glad to learn!), but I believe
PhotoImage is not a widget, and that a PhotoImage has to be presented in e.g. a
Label widget or some other widget that's able to display images.
Cheers,
- Alf
Hi,
Let me paste the code I have adapted from somewhere. I dont get a clue
on how to go further so that all the images would stay in their
respective positions.
thanks
suresh
def button_click_exit_mainloop (event):
event.widget.quit() # this will cause mainloop to unblock.
root = Tkinter.Tk()
root.bind("<Button>", button_click_exit_mainloop)
root.geometry('+%d+%d' % (100,100))
names = ["me1.jpg","me2.jpg","me1.jpg","me2.jpg","me1.jpg","me2.jpg"]
shape = (2,3)
xlen,ylen = 0,0
for i in range(shape[0]):
for j in range(shape[1]):
try:
images = [Image.open(f) for f in names]
images = [x.resize((300,200)) for x in images]
xsize = sum(im.size[0] for im in images)
ysize = sum(im.size[1] for im in images)
root.geometry('%dx%d' % (xsize,ysize))
tkpi = [ImageTk.PhotoImage(im) for im in images]
index = i*shape[1]+j
label_image = Tkinter.Label(root, image=tkpi[index])
label_image.place(x=xlen,y=ylen,width=images[index].size
[0],height=images[index].size[1])
if j == shape[1]-1:
ylen = ylen + images[index].size[1]
xlen = 0
else:
xlen = xlen + images[index].size[0]
print index,xlen,ylen
root.mainloop() # wait until user clicks the window
except Exception, e:
# This is used to skip anything not an image.
# Image.open will generate an exception if it cannot open a
file.
# Warning, this will hide other errors as well.
pass
I suggest you use the grid layout manager.
Uh, "geometry mangler".
Cheers,
- Alf