用图像填充网格,这样我可以控制位置是一个好习惯吗?

时间:2017-05-25 14:41:33

标签: python-3.x tkinter

我正在尝试在网格上找到一些图像,但是当我尝试执行类似

的操作时
panel = Label(root, image = img)
panel.grid(row = a, column = b)

其中a,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上找到一个新图像时,它按照我想要的方式进行,这是我目前的解决方案。我的问题是,这是一种让我使用整个网格的好方法吗?

2 个答案:

答案 0 :(得分:1)

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

如果通过"使用整个网格"你的意思是想要创建一个网格,其中所有行的高度相同,并且所有列的宽度相同,并且网格填充其包含的窗口,正确的解决方案是使用rowconfigure和{创建统一的行列{1}}。

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

columnconfigure

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选项告诉网格如何分配任何额外空间。通过为每行和每列提供相同的非零权重,所有额外空间将被平均分配,从而使行和列增大或缩小以适合窗口。

答案 1 :(得分:0)

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

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