python - 如何在 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()
解决方案
网格几何管理器将小部件放在二维表中。主小部件分为许多行和列,结果表中的每个“单元格”都可以容纳一个小部件。你可以在这里阅读更多关于它的信息。
要限制使用的行数,您可以简单地跟踪放置图像的位置。
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
推荐阅读
- c# - 简化迭代到 linq 查询
- python - python for循环赋值变量
- c++ - 如何在 libVLC 中拍摄快照而不显示媒体播放器
- c# - 在 C# 中以编程方式更改 Windows 文化
- authentication - 使用蓝牙进行身份验证
- c++ - 错误:不匹配调用'boost::.......'
- php - 有没有办法在 Laravel 的 .css 文件中使用 Blade 来生成“CSS”视图?
- python - 函数运行两次
- android - 多行文本视图与其基线对齐(ConstraintLayout Android Studio)
- python - Python - 绑定未检测到 Tkinter event_generate