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")