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

Я хочу хранить .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() 
Interesting Posts

pygraphviz ValueError: точка программы не найдена в пути

многопоточные процессы python для запуска исполняемых файлов

Точность ухудшается, чем дольше я тренирую модель Keras. Любые советы будут высоко оценены

Закрытие Python

Какое правильное регулярное выражение подходит для сопоставления значений, генерируемых uuid.uuid4 (). Hex?

какую фреймворк python использовать?

Является ли str.replace (..) заменой (..) ad nauseam стандартной идиомой в Python?

MongoDB ORM для Python?

Как получить имя пользователя в Python?

Правильный способ внедрения клиента Direct Connect в Twisted?

Можно ли установить флаг python -O (optimize) внутри скрипта?

CherryPy: как обрабатывать запрос, прежде чем он достигнет метода приложения?

Объединение 2 наборов данных csv с Python общим столбцом идентификатора – один csv имеет несколько записей для уникального идентификатора

Понимание django.shortcuts.redirect

Вызов метода перехвата в Python

Python - лучший язык программирования в мире.