Как добавить все изображения из папки в кнопку (в моем кадре)
Я хочу хранить .jpg
изображения из папки в массиве и использовать их, чтобы добавить их в кнопки в моем кадре Python.
Я использую библиотеки tkinter и PIL в Python 3.4.3. Я использую Windows 8.1 os. Я хочу загрузить изображение для папки с несколькими строками кода, а также элементную границу сетки, чтобы показать их как одно изображение
- Отключить базовое окно, когда всплывающее окно создается в Python TKinter
- Как изменить шрифт и размер кнопок и фрейма в tkinter с помощью python?
- Доступ к основному потоку в скрипте TKinter?
- Python: как получить обновленный текст ввода для использования в команде, привязанной к нему?
- progressbar в Tkinter с меткой внутри
- Python Преобразование температуры MVC: почему я получаю «TypeError: buttonPressed () отсутствует 1 обязательный позиционный аргумент:« self »
- Как получить текст метки Tkinter?
- Python / Tkinter: мышь перетаскивает окно без границ, например. overridedirect (1)
- Tkinter: Подождите, пока элемент в очереди
- NameError: глобальное имя 'text' не определено
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()
- cx_freeze конвертирует GUI-приложение (tkinter) после нажатия кнопки plot
- Как использовать индексы в Tkinter Label?
- Как сделать события tkinter repond во время ожидания данных сокета?
- Как сделать мигающее текстовое поле в tkinter?
- Tkinter GUI для преобразования файла фиксированной ширины в файл с разделителями
- Неопознанная ошибка. cx_freeze & tkinter
- перенаправить stdout в текстовый виджет tkinter
- Значение tkinter get () python из поля ввода
- Представление уравнения в виде объекта canvas в Tkinter
- Окно Tkinter говорит (не отвечает), но код работает
- Независимый от платформы инструмент для копирования текста в буфер обмена
- Получение и отображение изображений BLOB из базы данных Mysql с помощью Tkinter