Python 如何使用TKITTER将对象放置在框架的中间?

Python 如何使用TKITTER将对象放置在框架的中间?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我想创建一个游戏,可以发挥全屏和任何其他窗口大小。为此,我有创建一个框架、两个按钮和一个标签的代码。我希望按钮和标签位于框架的中心,但我不知道怎么做 作为一个临时解决方案,我在按钮顶部贴上了一个空的黑色标签,但现在这对我的想法不起作用 以下是我现在掌握的代码: import tkinter as tk def startgame(): pass mw = tk.Tk() mw.title('The Game') back=tk.Frame(master=mw, width=500,

我想创建一个游戏,可以发挥全屏和任何其他窗口大小。为此,我有创建一个框架、两个按钮和一个标签的代码。我希望按钮和标签位于框架的中心,但我不知道怎么做

作为一个临时解决方案,我在按钮顶部贴上了一个空的黑色标签,但现在这对我的想法不起作用

以下是我现在掌握的代码:

import tkinter as tk

def startgame():
    pass

mw = tk.Tk()
mw.title('The Game')

back=tk.Frame(master=mw, width=500, height=500, bg='black')
back.pack_propagate(0) 
back.pack(fill=tk.BOTH, expand=1) #Adapts the size to the window

#Here I had the label

go = tk.Button(master=back, text='Start Game', command=startgame, bg='#111', fg='red')
go.pack()
close = tk.Button(master=back, text='Quit', command=mw.destroy, bg='#111', fg='red')
close.pack()
info = tk.Label(master=back, text='Made by me!', bg='red', fg='black')
info.pack()

mw.mainloop()

问题:如何将按钮等设置在中间位置?

有许多方法可以将小部件置于另一个wiget的中心位置。在以下示例中,假设您希望
back
保持其原始大小,并使其在根窗口中居中。一旦你把这个小部件放在中心位置,你就可以集中精力把内部小部件放在里面,不管你怎么选择,框架都会保持在中心位置

注意:要使
后退
收缩以适合按钮(同时仍保持居中),请删除此行:

back.pack_propagate(0) 
使用包 使用pack时,您希望打开扩展(
expand=True
),但不希望小部件填充其区域(
fill=“none”

使用网格 使用网格,技术是创建一个3x3网格,框架位于中心单元中。然后,必须确保除中间的行和列之外的所有行和列都具有权重,以便任何额外的空间都位于这些行和列,而不是位于中间:

back.grid(row=1, column=1)
mw.grid_rowconfigure(0, weight=1)
mw.grid_rowconfigure(2, weight=1)
mw.grid_columnconfigure(0, weight=1)
mw.grid_columnconfigure(2, weight=1)
使用场所 可以说,最简单的解决方案是使用
place
。使用place,您只需指示tkinter将小部件的中心放置在0.5的相对x和y位置

back.place(relx=.5, rely=.5, anchor="center")

使框架或按钮居中的最佳方法是使用
放置

back.place(relx=.5, rely=.5, anchor="center")

您应该能够使用不起作用的.pack(anchor=CENTER)。我把它放在按钮和标签上,但没用。我遗漏了什么吗?我希望内部小部件集中在
back
框架中,而不是以mw为中心的back框架。怎么做?背面应尽可能大,您应该能够通过
背面
-Fame更改mw的大小,并且内部小部件移动到新的中间位置。@ErichSchmidt:所有小部件的行为都相同。在窗口中使框架居中的相同技术可用于使框架中的按钮居中。保持按钮居中的最简单方法是将它们放在框架中,并将框架中心。如果您想在这些内部窗口小部件和外部窗口之间创建另一个框架,只需创建另一个框架。
back.place(relx=.5, rely=.5, anchor="center")