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

时间:2010-11-21 23:23:39

标签: python tkinter frame

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

2 个答案:

答案 0 :(得分:7)

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

或者,使用可以使用相对或绝对定位的地方。您可以使用.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()

答案 1 :(得分:2)

如果要将窗口小部件(如框架)居中放置在框架中,最简单的方法是通过.grid()。如果使用.pack(),则由于pack()具有side关键字,最终会卡在一条边上。

如果您使用.place(),则您会被迫强加外框的尺寸(通常不必这样做,但已经做完了,所以这不是问题),因为当框架像placedpacked小部件一样自动调整大小时,未检测到gridded小部件。我不知道为什么,但是就是这样。

因此,通常,将窗口小部件居中于框内的最佳方法是将窗口小部件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)