Python 使用.grid()定位时,如何将小部件放置在tkinter窗口的最底部?

Python 使用.grid()定位时,如何将小部件放置在tkinter窗口的最底部?,python,tkinter,Python,Tkinter,我知道不能在同一Tkinter窗口中使用不同类型的几何体管理器,例如.grid()和.pack()。我有一个使用.grid()布局的窗口,现在我正在尝试添加一个状态栏,该状态栏将被捕捉到窗口的底部。我在网上找到的唯一方法是使用.pack(side=BOTTOM),因为窗口的其余部分使用.grid() 使用.grid()时,有没有一种方法可以选择窗口底部来放置小部件 因为我有点懒得做其他事情,所以使用标签,你可以做框架来确保你的窗口的每个部分都可以根据需要打包/网格化。框架将是一个有用的工具,供您

我知道不能在同一Tkinter窗口中使用不同类型的几何体管理器,例如.grid()和.pack()。我有一个使用.grid()布局的窗口,现在我正在尝试添加一个状态栏,该状态栏将被捕捉到窗口的底部。我在网上找到的唯一方法是使用.pack(side=BOTTOM),因为窗口的其余部分使用.grid()

使用.grid()时,有没有一种方法可以选择窗口底部来放置小部件

因为我有点懒得做其他事情,所以使用标签,你可以做框架来确保你的窗口的每个部分都可以根据需要打包/网格化。框架将是一个有用的工具,供您在尝试排列小部件时使用。请注意,在决定你的父母时,使用一个类可以让事情变得更容易一些。因此,假设每一帧都是父帧,它们的子帧可以根据需要打包。因此,我建议您绘制所需的GUI,并查看如何安排它们。此外,如果要在一个帧中添加另一个帧,只需执行以下操作:

self.level2 = Frame(self.parent1)
您可以在文档中查看其他设置


PS:我使用的是一个类,因此是self,如果你不想使用类,那么可以将其更改为没有类。类使阅读更方便,只需给它一个比任何其他行都大的
参数。然后,为它前面的至少一行赋予权重

更好的方法是使用框架来组织代码。将滚动条放在底部,并在其上方放置一个框架。然后,对框架内的所有内容使用网格

例如:

# layout of the root window
main = tk.Frame(root)
statusbar = tk.Label(root, text="this is the statusbar", anchor="w")

statusbar.pack(side="bottom", fill="x")
main.pack(side="top", fill="both", expand=True)

# layout of the main window
for row in range(1, 10):
    label = tk.Label(main, text=f"R{row}")
    label.grid(row=row, sticky="nsew")
    main.grid_rowconfigure(row, weight=1)
...

提供一些您想要实现的示例代码。您可以在第一级完成状态栏打包,其他窗口也可以打包在另一个窗口中。root->(statusbar(pack),other(pack))other(pack)->(window1(grid),window2(grid))如果需要,我会发布完整的代码。最好的建议是@Jason Chia评论。自从我开始与特金特,我总是有相同的问题。你能做的最好的事情就是把你的主窗口分割成框架。使用网格方法管理主窗口。然后在你的框架内(底部的那个)创建你的状态栏。由于此框架在窗口小部件中是空的,因此当使用.grid()定位时,您可以在tkinter窗口的最底部添加一个状态栏,其中的pack和use side=BOTTOM“:use
.grid\u rowconfigure(,weight=1)
。这将迫使LayoutManager在底部小部件之前调整空间大小,使其尽可能大。@JimErginbash遗漏了关键字frames:D
# layout of the root window
main = tk.Frame(root)
statusbar = tk.Label(root, text="this is the statusbar", anchor="w")

statusbar.pack(side="bottom", fill="x")
main.pack(side="top", fill="both", expand=True)

# layout of the main window
for row in range(1, 10):
    label = tk.Label(main, text=f"R{row}")
    label.grid(row=row, sticky="nsew")
    main.grid_rowconfigure(row, weight=1)
...