如何让一个元素贴在Tkinter的右下角?

时间:2016-12-25 17:38:00

标签: python python-3.x tkinter

我在Tkinter for python3中将按钮放在这样的框架上:

b2_1 = Button(frame1, text='aaaaaaaaaaaa')
b2_1.pack(pady=20, side=RIGHT)

b2_2 = Button(frame1, text='bbbbbbbbbbbbbbb')
b2_2.pack()

我希望按钮b2_1和b2_2不仅可以粘贴到右侧,还可以粘贴到底部,一个紧靠另一个。 我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:3)

答案是"我如何在右下角放置一些东西?"不能脱离背景得到充分的回答。这实际上取决于窗口中的其他内容。您可以使用place轻松地将小部​​件放置在任何您想要的位置,但它很少是正确的解决方案。

如果你确实想要在网格中放置东西,网格相对容易理解(例如:最右边的列,底部有几行,顶部有一行或多行。

也可以使用

Pack,但它通常涉及使用其他帧。例如,您可以为左侧和右侧创建一个框架,然后将按钮打包在右侧框架的底部。

还可以使用多个以及其他帧。例如,您可以使用网格将主窗口小部件布局到页眉,主区域和页脚,然后使用pack来排列页脚中的按钮。

如果您只想要两个按钮,并且希望它们堆叠在右下角,我建议您使用grid。除了将它们放在底部的行中之外,还需要确保至少有一个其他行和另一个列占用任何额外的空间。行和列可以为空,但必须将它们配置为具有"权重"。

例如:

frame1.grid_rowconfigure(0, weight=1)
frame1.grid_columnconfigure(0, weight=1)

# give the empty row 0 and column 0 a non-zero weight
# so that grid gives all extra space to those columns.

b2_1.grid(row=1, column=1)
b2_2.grid(row=2, column=1)

答案 1 :(得分:2)

在这种情况下,

pack不是理想的几何管理器。你在一个框架中使用包,你只想一个接一个地粘住孩子。我还有一个地方经理,我还没有看到“自然”用途。

在这种情况下,请使用grid manager。这不如包装简单,但具有您想要的灵活性。一旦弄清楚网格将包含多少行和列,.grid(column=lastcol,row=lastrow)的放置就很简单了。 Terry Jan Reedy也建议使用太大的数字,因为没有显示空列/行,但我喜欢迂腐,所以我知道我的网格看起来是什么样的。

答案 2 :(得分:0)

将元素放置在网格单元中-位置与指南针相同:N,E,S,W,NE,NW,SE和SW。

此示例将其粘贴到右下角:

example_label.grid(column=0, row=0,sticky =SE)

答案 3 :(得分:0)

框架/窗口的.gridsize()方法返回具有网格大小的元组。即

    frame1.grid_size() = (number_of_columns_in_frame1, number_of_rows_in_frame1)

要在框的右下角放置一些内容,请使用:

    b2_1 = Button(frame1, text='aaaaaaaaaaaa')
    b2_1.grid(row=frame1.grid_size()[1], column=frame1.grid_size()[0])

这会将行和列添加到frame1的网格中,并将b2_1放置在新的行和列中(因为网格的行/列系统的索引为零)。

在其下面添加另一个按钮: 使用与上述相同的系统,即

    b2_2 = Button(frame1, text='bbbbbbbbbbbbbbb')
    b2_2.grid(row=frame1.grid_size()[1], column=frame1.grid_size()[0])

将创建另一个新的行和列,并将b2_2放在b2_1的右下角。 因此,要将b2_2直接放在b2_1下方(即与b2_1放在同一列中),您必须将该列减少1即

    b2_2 = Button(frame1, text='bbbbbbbbbbbbbbb')
    b2_2.grid(row=frame1.grid_size()[1], column=frame1.grid_size()[0]-1)