【发布时间】:2021-08-17 21:28:28
【问题描述】:
这个想法是从一个目录(文件夹)中选择所有图像,它将通过tkinter在Window中显示所有这些缩略图。
我能够找到所有带有while 的图像目录,如下面的代码所示,但我无法让它们全部自动显示。
是否有任何库或本地函数来创建这个图像“画廊”?
from tkinter import *
from typing import Sized
from PIL import *
import os
import cv2
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.pack(fill=BOTH, expand=1)
load = Image.open("temporario/page0.png")
load.thumbnail((350,350))
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=50, y=50)
files = []
pasta = 'temporario'
for (diretorio, subpastas, arquivos) in os.walk(pasta):
files.extend(arquivos)
#print(pasta + '/' + files[2])
i = 0
while i <= 2:
dirImg = pasta + '/' + files[i]
loading = Image.open(dirImg)
loading.thumbnail((350,350))
renderiza = ImageTk.PhotoImage(loading)
i = i + 1
print(dirImg)
imagemA = Label(self, image=renderiza)
imagemA.image = renderiza
imagemA.place(x=350, y=50)
root = Tk()
app = Window(root)
root.wm_title("Tkinter window")
root.geometry("800x500")
root.mainloop()
【问题讨论】:
-
您将每个缩略图图像放置在窗口中完全相同的坐标处。
.grid()几何管理器在这里会更有意义。 -
没有内置的东西——有时你必须自己写东西或找到类似的问题。您可能会发现 How to make a image viewer with left right functionality in tkinter? 感兴趣。
-
你不能真正在与
tkinter相同的线程/进程中使用循环,要么使用threading(或multiprocessing,但threading更容易)或使用.after()“循环”,是的,可以创建一个画廊,并添加到@martineau 评论中,您也可以在 youtube 上找到教程,例如 this one about creating an image viewer(顺便说一句,也可能有一个网格图像教程或另一个涵盖“画廊”类型的教程东西)
标签: python tkinter python-imaging-library