如何在Tkinter中将框架居中于另一个框架?
我有一个框架,我用 grid_propagate()
方法固定了它的大小。现在我想在这个框架中把另一个框架居中,应该怎么做呢?
2 个回答
6
如果你想把一个小部件(比如一个框)放在另一个框的正中间,最简单的方法就是用 .grid()
。如果你用 .pack()
,那么小部件就会被固定在某一边,因为 pack()
有一个 side
的选项。
如果你用 .place()
,那么你就得强行设置外框的大小(通常你不需要这样做,但既然你已经做了,那就没问题),因为用 place
放置的小部件在外框自动调整大小时是无法被检测到的,这和用 pack()
或 grid()
放置的小部件不一样。我也不太清楚为什么会这样,但就是这样。
所以,总的来说,把小部件放在框的正中间的最好方法就是用 grid
。默认情况下,sticky
选项是 CENTER。如果你想在调整外框大小时小部件仍然保持居中,你需要让外框的单元格可以扩展。你可以通过 .grid_rowconfigure()
等命令来实现。所以,一个例子可能是:
widget = Widget(frame, ...)
widget.grid(row=0, column=0, sticky="")
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
19
把它放大到填满所有方向。根据需要添加一些内边距。
或者,可以使用放置功能,这样你就可以使用相对或绝对定位。你可以设置相对的x/y为0.5/0.5,并且锚点设置为“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()