我正在使用grid()
将小部件放在tkinter窗口中。我试图在窗口的水平中心放置一个标签,让它保持在那里,即使窗口调整大小。我怎么能这样做?
顺便说一下,我不想使用pack()
。我想继续使用grid()
。
答案 0 :(得分:9)
没有技巧 - 默认情况下,窗口小部件位于分配给它的区域的中心。只需将标签放在没有任何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()
答案 1 :(得分:0)
没有特殊要求。小部件将自动位于其父级的中间。告诉父母填写所有可用空间需要什么。
from tkinter import *
root = Tk()
root.geometry("500x500+0+0")
frmMain = Frame(root,bg="blue")
startbutton = Button(frmMain, text="Start",height=1,width=4)
startbutton.grid()
#Configure the row/col of our frame and root window to be resizable and fill all available space
frmMain.grid(row=0, column=0, sticky="NESW")
frmMain.grid_rowconfigure(0, weight=1)
frmMain.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.mainloop()
这使用网格而不是打包来放置小部件,并且网格被配置为填充窗口的整个大小。无论窗口大小如何,该按钮都将出现在中间。
答案 2 :(得分:0)
这对我有用:
lbl1 = Label(self, text='some text')
lbl1.grid(row=1, column=1, sticky='e') # right aligned
# sticky='w' # left aligned
# sticky='' # centered (or no sticky)