首页 > 解决方案 > 如何在 tkinter 中的循环中显示网格中的图像

问题描述

我想在行和列中显示图像...行应该是 4...图像的数量将是随机的..

import tkinter as tk
from PIL import Image, ImageTk
from urllib.request import urlopen
from io import BytesIO

root = tk.Tk()

#number of urls will be random
URL_list = ["urls","urls","urls"]


for url in URL_list:

    u = urlopen(url)
    raw_data = u.read()
    u.close()

    im = Image.open(BytesIO(raw_data))
    photo = ImageTk.PhotoImage(im)

    label = tk.Label(image=photo)
    label.image = photo
    label.pack()

root.mainloop()

我的输出

标签: pythontkinter

解决方案


网格几何管理器将小部件放在二维表中。主小部件分为许多行和列,结果表中的每个“单元格”都可以容纳一个小部件。你可以在这里阅读更多关于它的信息。

要限制使用的行数,您可以简单地跟踪放置图像的位置。

import tkinter as tk
from PIL import Image, ImageTk
from urllib.request import urlopen
from io import BytesIO

root = tk.Tk()

#number of urls will be random
URL_list = ["urls","urls","urls"]

MAX_ROWS = 4
current_row = 0
current_column = 0

for url in URL_list:

    u = urlopen(url)
    raw_data = u.read()
    u.close()

    im = Image.open(BytesIO(raw_data))
    photo = ImageTk.PhotoImage(im)

    label = tk.Label(image=photo)
    label.image = photo
    label.grid(row = current_row, column = current_column)
    current_row += 1
    if (current_row >= 4):
        current_column += 1
        current_row = 0

root.mainloop()

这将按以下顺序放置您的图像:

1 5 9
2 6 10
3 7 ...
4 8 

推荐阅读