在网格 Tkinter 中对齐小部件 window

Aligning widgets in a grid Tkinter window

我想在 Tkinter 创建的 window 中将我的所有小部件居中对齐。我所有的小部件都使用网格几何系统。我已经尝试过列和行的权重,但它们不适用于我没有明确设置的行和列。我还尝试将整个 window 包装在一个框架中并使用 grid(sticky=NSEW) 但它没有任何区别。对于我的用例,我有 50 多个 rows/columns,我不想 运行 每个权重设置。 这是我目前所拥有的:

root = Tk()
root.minsize(500, 100)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(2, weight=1)
root.title('123')
root.iconbitmap(get_res_path('icon.ico'))

status_bar = LabelFrame(root, bd=1, relief=SUNKEN)
status_bar.grid(row=1, column=0, sticky=EW)
status_bar.rowconfigure(1, weight=1)
status_bar.columnconfigure(1, weight=1)
testing_text = Label(status_bar, text='', anchor=W)
testing_text.grid(row=0, column=0, sticky=W)
status_text = Label(status_bar, text='Initializing', anchor=E)
status_text.grid(row=0, column=1, sticky=E)

ver_msg = Label(root, text='123')
ver_msg.grid(row=0, column=0)
Frame(root).pack()

我希望 window 中的每个元素(文本、输入框和按钮)都位于 window 的中间,如果我拖动 window甚至更大,它能够自我调整以保持在中间。

我看到了很多问题,但是 none 给了我一个有效的答案。

我能想到的使整个应用程序居中的最简单方法是将整个小部件放在一个框架内,然后在主框架上使用 pack(),例如:

frame = Frame(root)
frame.pack()

Button(frame, text='This is a button').grid(row=0,column=0)
Label(frame, text='This is a label').grid(row=1,column=0)

您可以执行此操作以将小部件对齐到框架的左侧

frame = Frame(root)
frame.pack(fill=X, padx=5)
Button(frame, text='This is a button').grid(row=0,column=0)
Label(frame, text='This is a label').grid(row=1,column=0)