Python网格专栏

时间:2016-12-08 19:58:18

标签: python tkinter grid-layout

我想使用网格栏填充文本窗口小部件的孔列。这可能吗?

import tkinter
root = tkinter.Tk()
text = tkinter.Text(root)
text.insert('end','Text')
text.grid(row=0,column=0)#columnspan=?
root.mainloop()

1 个答案:

答案 0 :(得分:1)

使用grid时,您需要告诉tkinter它应该如何分配额外的空间。网格将在行和列之间分配与其“权重”成比例的任何额外空间。例如,权重为3的列将比权重为1的列获得3倍的额外空间。每行和列的默认权重为零,这意味着它不会给予任何额外的空间。

根据经验,每当您使用grid时,您应该为至少一行和至少一列提供非零权重,这样任何额外的空间都不会被使用。

在您的情况下,窗口小部件放在根窗口中,因此您需要在根窗口中配置行和列的权重。由于您只使用一行一列,因此可以这样做:

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

这只是故事的一部分。有了它,tkinter将为包含文本小部件的行和列分配额外的空间,但因为你没有告诉它,否则小部件将浮动在该行和列的中间。

要解决此问题,您需要让窗口小部件的边缘“粘住”到给定空间的边缘。您可以使用sticky属性执行此操作。在您的具体情况下,您可以这样做:

text.grid(row=0,column=0, sticky="nsew")

sticky的值是字母“n”(北),“s”(南),“e”(东)和“w”(西),或任何组合。

请注意,如果您只想在窗口或框架中放置一个小部件,则可以使用一行代码获得相同的效果:

text.pack(fill="both", expand=True)