没有诀窍——默认情况下,小部件位于分配给它的区域的中心。只要将标签放在没有任何sticky属性的单元格中,它就会居中。
现在,另一个问题是,如何得到它被分配到中心的区域。这取决于许多其他因素,例如还有哪些小部件,它们是如何排列的,等等
下面是一个简单的例子,显示了一个单中心标签。它通过确保它所在的行和列占用所有额外的空间来实现这一点。请注意,无论窗口有多大,标签都保持居中。import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="This should be centered")
label.grid(row=1, column=1)
self.grid_rowconfigure(1, weight=1)
self.grid_columnconfigure(1, weight=1)
if __name__ == "__main__":
root = tk.Tk()
Example(root).grid(sticky="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.mainloop()
通过赋予所有行和列权重,可以获得类似的效果,但带有标签的行和列除外。import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="This should be centered")
label.grid(row=1, column=1)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(2, weight=1)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(2, weight=1)
if __name__ == "__main__":
root = tk.Tk()
Example(root).grid(sticky="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.mainloop()