Python 3.x 用图像填充网格以便我可以控制位置是一种好的做法吗?

Python 3.x 用图像填充网格以便我可以控制位置是一种好的做法吗?,python-3.x,tkinter,Python 3.x,Tkinter,我试图在网格上定位一些图像,但是当我尝试做类似的事情时 panel = Label(root, image = img) panel.grid(row = a, column = b) a = 0 b = 0 for img in ls2: # ls2 is a list containing instances of the blank image a += 1 if a == 11: a = 1 b += 1 panel = L

我试图在网格上定位一些图像,但是当我尝试做类似的事情时

panel = Label(root, image = img)
panel.grid(row = a, column = b)
a = 0
b = 0

for img in ls2: # ls2 is a list containing instances of the blank image
    a += 1
    if a == 11:
        a = 1
        b += 1 

    panel = Label(root, image = img)
    panel.grid(row = a, column = b)
其中
a、b
是应该将图像置于网格中心的值,我总是将图像置于左上角,因为空列/行不会填充空间。因此,根据一位朋友的建议,我添加了一张空白图像,并做了如下操作

panel = Label(root, image = img)
panel.grid(row = a, column = b)
a = 0
b = 0

for img in ls2: # ls2 is a list containing instances of the blank image
    a += 1
    if a == 11:
        a = 1
        b += 1 

    panel = Label(root, image = img)
    panel.grid(row = a, column = b)

现在,当我试图在
row=x,column=y
上定位一个新图像时,它会按照我的要求运行,这是我当前的解决方案。我的问题是,这是一个让我能够使用整个网格的好方法吗?

不,这不是一个好方法。不需要创建不可见的小部件。然而,很难说什么是好方法,因为“使用整个网格”有点模糊

如果“使用整个网格”的意思是要创建一个网格,其中所有行的高度相同,所有列的宽度相同,网格填充其包含窗口,那么正确的解决方案是使用
rowconfigure
columnconfigure
创建统一的行-列

例如,如果要创建大小相等的4x4网格,可以执行以下操作:

import tkinter as tk

root = tk.Tk()

for row in range(4):
    root.grid_rowconfigure(row, uniform="default", weight=1)
for column in range(4):
    root.grid_columnconfigure(column, uniform="default", weight=1)

label_2_2 = tk.Label(root, text="row 2, column 2", borderwidth=2, relief="groove")
label_1_0 = tk.Label(root, text="row1, column 0", borderwidth=2, relief="groove")

label_1_0.grid(row=1, column=0)
label_2_2.grid(row=2, column=2)

root.mainloop()
uniform
选项接受任意字符串。具有相同值的每一行(或列)将具有相同的维度


weight
选项告诉网格如何分配任何额外空间。通过为每一行和每一列赋予相同的非零权重,所有额外的空间将被平均分配,从而使行和列增长或收缩以适应窗口

刚刚找到位置几何体管理器。它更明确,让我可以控制我的图像在小部件中的确切位置


panel.place(x=100,y=100)
给出了像素精度的位置,这正是我最初寻找的位置。

你已经得到了一个很好的答案,但我想指出,如果你确实需要填充物来正确定位,你不需要空白图像:一个
Frame()
使用指定的
width=
height=
选项将完成此任务,而不会产生无用图像的内存开销。@jasonharper您是说一帧中的一帧吗?我尝试过,但没有成功:(