Как добавить все изображения из папки в кнопку (в моем кадре)

Я хочу хранить .jpg изображения из папки в массиве и использовать их, чтобы добавить их в кнопки в моем кадре Python.

Я использую библиотеки tkinter и PIL в Python 3.4.3. Я использую Windows 8.1 os. Я хочу загрузить изображение для папки с несколькими строками кода, а также элементную границу сетки, чтобы показать их как одно изображение

One Solution collect form web for “Как добавить все изображения из папки в кнопку (в моем кадре)”

Ниже приведен код, который поможет вам начать работу.

Чтобы упростить тестирование, я написал небольшую программу, которая использует PIL для создания цветных квадратов и сохраняет их в папке. Я тестировал эти программы, используя Python 2.6.6 для Linux. Они должны работать на Python 3 (предполагая, что Tkinter & PIL установлены правильно в вашей системе), но вам нужно будет изменить import Tkinter as tk на
import tkinter as tk в tk_frame_grid.py.


Эта программа генерирует 30 цветных квадратов, сохраняя их в папке «квадраты» в текущем каталоге. Перед запуском программы вам нужно создать «квадраты».

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() 

Эта программа сначала заполняет список изображениями PIL, используя файлы изображений из именованного каталога; эти изображения могут быть в любом формате файла, который PIL может читать. Затем он создает окно Tkinter, содержащее фрейм, который содержит сетку кнопок с использованием изображений. Проверка ошибок отсутствует, поэтому не помещайте файлы без изображения в папку «квадраты».

Вам нужно указать размеры сетки. Если для заполнения сетки недостаточно изображений, вы получите ошибку StopIteration .

tk_frame_grid.py

 #!/usr/bin/env python ''' Create a grid of Tkinter Buttons with PIL images in a Frame See http://stackoverflow.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() 
Python - лучший язык программирования в мире.