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您是说一帧中的一帧吗?我尝试过,但没有成功:(