una txt ruta recorrer nombre manejo leer importar gestion escribir directorio como carpetas carpeta archivos archivo actual python tkinter python-imaging-library

python - txt - Cómo agregar todas las imágenes de una carpeta a un botón(en mi marco)



python directorio actual (1)

Quiero almacenar imágenes .jpg de una carpeta en una matriz, y luego usarlas para agregarlas a un botón en mi marco de Python.

Estoy usando tkinter y la biblioteca PIL en Python 3.4.3. Estoy usando Windows 8.1 os Quiero cargar la imagen para una carpeta con pocas líneas de código y también elemento de borde de la cuadrícula para mostrarlos como una sola imagen


A continuación hay un código para comenzar.

Para simplificar las pruebas, escribí un pequeño programa que usa PIL para generar cuadrados de colores y los guarda en una carpeta. Probé estos programas usando Python 2.6.6 en Linux. Deben funcionar en Python 3, (suponiendo que Tkinter y PIL estén instalados correctamente en su sistema) pero necesitará cambiar la import Tkinter as tk a
import tkinter as tk en tk_frame_grid.py.

Este programa genera 30 cuadrados de colores, guardándolos en la carpeta ''cuadrados'' en el directorio actual. Necesita crear ''cuadrados'' antes de ejecutar el programa.

PIL_2colorsquares.py

#! /usr/bin/env python '''''' Create squares that fade from one color to another & save Written by PM 2Ring 2015.07.18 '''''' from PIL import Image from itertools import permutations def color_squares(size, colorpairs, basename, ftype): #Make the composition mask m = 255.0 / (2 * size - 2) r = range(size) mask = Image.new(''L'', (size, size)) mask.putdata([int(m * (x + y)) for y in r for x in r]) for count, (c0, c1) in enumerate(colorpairs): im0 = Image.new(''RGB'', (size, size), color=c0) im1 = Image.new(''RGB'', (size, size), color=c1) im = Image.composite(im0, im1, mask) im.save(''%s%03d%s'' % (basename, count, ftype)) def main(): size = 64 colors = (''red'', ''yellow'', ''green'', ''cyan'', ''blue'', ''magenta'') colorpairs = permutations(colors, 2) basename = ''squares/sq'' ftype = ''.png'' color_squares(size, colorpairs, basename, ftype) if __name__ == ''__main__'': main()

Este programa primero llena una lista con imágenes PIL, usando archivos de imagen de un directorio nombrado; estas imágenes pueden estar en cualquier formato de archivo que PIL pueda leer. Luego crea una ventana de Tkinter que contiene un Marco que contiene una grilla de Botones usando las imágenes. No hay comprobación de errores, por lo que no coloque archivos que no sean imágenes en la carpeta ''cuadrados''.

Necesita especificar las dimensiones de la grilla. Si no hay suficientes imágenes para llenar la cuadrícula, obtendrá un error StopIteration .

tk_frame_grid.py

#!/usr/bin/env python '''''' Create a grid of Tkinter Buttons with PIL images in a Frame See http://.com/q/31489121/4014959 Written by PM 2Ring 2015.07.18 '''''' from __future__ import print_function import os import Tkinter as tk from PIL import Image, ImageTk class FrameDemo(object): '''''' A Frame containing a grid of image Buttons '''''' def __init__(self, rows, columns, images): images = iter(images) master = tk.Tk() master.title("Image Buttons in a Frame") frame = tk.Frame(master) frame.pack() for y in range(rows): for x in range(columns): #Get the next image from the list and #convert it to a TK Photo object name, img = next(images) photo = ImageTk.PhotoImage(img) #Create the button & put it in the Frame b = tk.Button(frame, image=photo) b.grid(row=y, column=x) #Add a call-back function func = lambda t=name: self.button_cb(t) b.config(command=func) #We have to save a reference to the photo or it gets #garbage-collected, so we attach it as a button attribute b.photo = photo master.mainloop() def button_cb(self, name): print("''%s'' button pressed" % name) def main(): image_folder = ''squares'' #Load all files in image_folder as PIL images #and put them into a list images = [(name, Image.open(os.path.join(image_folder, name))) for name in sorted(os.listdir(image_folder))] gui = FrameDemo(rows=5, columns=6, images=images) if __name__ == ''__main__'': main()