如何在Tkinter中的框架中居中框架?

rec*_*gle 4 python tkinter frame

我有一个框架,我修复了使用grid_propagate()方法的大小.我想在这个框架中居中框架.我该怎么做?

Bry*_*ley 8

打包它以填补所有方向.根据需要添加填充.

或者,使用允许您使用相对或绝对定位的地方.您可以使用.5/.5的相对x/y和"c"(中心)的锚点.

import Tkinter as tk

root=tk.Tk()
f1 = tk.Frame(width=200, height=200, background="red")
f2 = tk.Frame(width=100, height=100, background="blue")

f1.pack(fill="both", expand=True, padx=20, pady=20)
f2.place(in_=f1, anchor="c", relx=.5, rely=.5)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)


Gar*_*127 6

如果您想将小部件(如框架)置于框架内居中,最简单的方法是通过.grid(). 如果您使用.pack(),您最终会卡在其中一条边上,因为pack()hasside关键字。

如果您使用.place(),那么您将被迫强制外框的大小(通常您不必这样做,但您已经这样做了,所以这不是问题),因为placed当框架像packedgridded小部件一样自动调整大小。我不知道为什么,但事情就是这样。

因此,一般来说,将小部件置于框架内居中的最佳方法是将grid小部件放入框架中。(该sticky选项默认为 CENTER。)然后,如果您希望能够调整外框的大小并使小部件保持居中,则需要允许外框的单元格展开/增长。您可以通过.grid_rowconfigure()etc 命令来完成此操作。因此,一个例子可能是:

        widget = Widget(frame, ...)
        widget.grid(row=0, column=0, sticky="")
        frame.grid_rowconfigure(0, weight=1)
        frame.grid_columnconfigure(0, weight=1)
Run Code Online (Sandbox Code Playgroud)