【问题标题】:How to place objects in the middle of a frame using tkinter?如何使用 tkinter 将对象放置在框架的中间?
【发布时间】:2016-08-04 06:58:04
【问题描述】:

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

作为临时解决方案,我在按钮顶部放置了一个空的黑色标签,但现在这不符合我的想法。

这是我现在拥有的代码:

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

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

【问题讨论】:

  • 你应该可以使用 .pack(anchor=CENTER)
  • 那行不通。我将它放入按钮和标签中,但它不起作用。我错过了什么吗?

标签: python python-3.x tkinter


【解决方案1】:

有很多方法可以让一个小部件在另一个小部件中居中。在以下示例中,假设您希望 back 保持其原始大小,并使其在根窗口中居中。一旦您将此小部件居中,您就可以专注于将内部小部件放置在其中,无论您选择什么,框架将保持居中。

注意:要让back 缩小以适应按钮(同时仍保持居中),请删除此行:

back.pack_propagate(0) 

使用包

使用 pack,您想打开扩展 (expand=True) 但不让小部件填充其区域 (fill="none")。

back.pack(fill="none", expand=True)

使用网格

使用网格,该技术是创建一个 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-frame 中居中,而不是在 mw 中居中。怎么做?背面应尽可能大,您应该能够通过back-Fame 调整其大小并将内部小部件移动到新的中间来更改 mw 的大小。
  • @ErichSchmidt:所有小部件的行为都相同。使框架在窗口中居中的相同技术可用于使按钮在框架中居中。将按钮保持在中间的最简单方法是将它们放在一个框架中,并使框架居中。如果你想在这些内部小部件和外部窗口之间有另一个框架,只需创建另一个框架。
【解决方案2】:

居中框架或按钮的最佳方式是使用place

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

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2021-01-05
    • 2013-01-29
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多