默认情况下,.grid()不在Tkinter(Python)中居中放置我的小部件

时间:2018-09-30 20:14:31

标签: python tkinter

from tkinter import *
root = Tk()

equa = ""
equation = StringVar()

calculation = Label(root, textvariable = equation)

equation.set("23 + 54")

calculation.grid(columnspan = 4)

def btnPress(num):
    global equa
    equa = equa + str(num)
    equation.set(equa)

Button0 = Button(root, text = "0", command = lambda:btnPress(0))
Button0.grid(row = 1, column = 0)

Button1 = Button(root, text = "1", command = lambda:btnPress(1))
Button1.grid(row = 1, column = 1)

Button2 = Button(root, text = "2", command = lambda:btnPress(3))
Button2.grid(row = 1, column = 2)

root.mainloop()

每当我运行代码时,.grid()不会自动将按钮居中。我已经读过.grid()应该会自动将小部件居中,但是我不确定是否做错了什么。

1 个答案:

答案 0 :(得分:0)

默认情况下,grid几何管理仅使用所需的空间,而不再使用。调整窗口大小时,除非您告诉grid如何使用它,否则所有多余的空间都会被闲置。

行和列具有weight属性,该属性指示grid如何使用多余的空间。具有正权重的每一行和/或列都将有多余的空间。权重是成比例的,因此权重为2的列将获得权重为1的列的两倍多的额外空间。

如果您希望按钮占用所有多余的空间,请为每列赋予相同的权重。如果要使它们居中,请对沿边缘的空列赋予权重。行和额外的垂直空间也是如此。

您可以使用主窗口小部件的columnconfigure方法来给列赋予权重。在您的情况下,这是根窗口。

示例

要使按钮均匀分布,请添加以下代码行:

root.grid_columnconfigure((0, 1, 2), weight=1)

enter image description here

如果您希望按钮本身扩展并填充额外的空间,请使用sticky属性使按钮粘在列的边缘:

Button0.grid(row = 1, column = 0, sticky="ew")
Button1.grid(row = 1, column = 1, sticky="ew")
Button2.grid(row = 1, column = 2, sticky="ew")

enter image description here

如果您希望按钮保留在中间,请使用以下代码将所有粗细赋予空列:

calculation.grid(row=0, column=1, columnspan = 3)
Button0.grid(row=1, column=1, sticky="ew")
Button1.grid(row=1, column=2, sticky="ew")
Button2.grid(row=1, column=3, sticky="ew")
root.grid_columnconfigure((0, 4), weight=1)

enter image description here