如何将tkinter小部件置于粘性框架中心

lit*_*gon 8 python grid tkinter button centering

我正在使用tkinter在python3中编写一个游戏,我在使用网格做我想要它做的事情时遇到了一些麻烦.我已经查看了至少五页的谷歌搜索结果,包括堆栈溢出答案,以及如何提出我能想到的这个问题的每个变体.我终于放弃并创建了这个帐户来询问这个问题.

我得到的:一个按钮(newGameButton)和一个标签(messageBox),它以一个框架(topBar)为中心,它本身居中但不横向覆盖整个窗口(contentFrame).

我设法获得的最好(通过放在sticky=W+EtopBar上):框架现在跨越整个窗口,按钮和标签保持相同的大小(标签上的粘性没有做任何事情,并且按钮上的粘性仅使其成为作为标签的宽度,现在卡在topBar的左侧.

我想要它做的事:让框架跨越整个窗口,标签也跨越整个窗口,按钮居中.

topBar的原因是columnspan=23内容框架中的其余内容是23列宽(包括0列).我在框架中有按钮和标签的原因是我希望围绕它们的整个框具有边框效果.

码:

self.contentFrame = Frame(self.root)
self.contentFrame.grid(row=0, column=0)
self.topBar = Frame(self.contentFrame, border=2, relief=RAISED)
self.topBar.grid(row=0, column=0, columnspan=23)
self.newGameButton = Button(self.topBar, text="New Game")
self.newGameButton.grid(row=0, column=0)
self.messageBox = Label(self.topBar, textvariable=self.message, height=2)
self.messageBox.grid(row=1, column=0, sticky=W+E)
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?在这一点上,我非常绝望.

Bry*_*ley 5

问题在于您的所有列都没有权重。权重属性决定了哪些列(和行)获得任何额外的空间。由于没有一个列的权重为非零,因此没有多余的空间分配给它们,因此它们将保持尽可能的小。

根据经验,一帧中的至少一行和一列应始终赋予非零权重。在您的情况下,将所有帧的行0和列0的权重设置为1似乎可行:

self.root.grid_columnconfigure(0, weight=1)
self.root.grid_rowconfigure(0, weight=1)
self.contentFrame.grid_columnconfigure(0, weight=1)
self.contentFrame.grid_rowconfigure(0, weight=1)
self.topBar.grid_columnconfigure(0, weight=1)
self.topBar.grid_rowconfigure(0, weight=1)
Run Code Online (Sandbox Code Playgroud)