问题描述
因此,请看下面的图片。
在这个窗口上,我有3个帧,它们实际上是从tk.Frame继承的(我认为在这里没有什么不同)。
第一个框架位于顶部,具有3个按钮,程序的后续部分将添加另外1个。第二个框架由这9个按钮组成3x3布局。 并且第3帧有一个标签(我实际上想在下面放两个标签,一个标签在左侧,一个标签在右侧)。
我想要实现的是保持第一帧不变,第二帧中的3x3布局必须位于中心(至少水平),第三帧中的标签位于最左侧,另一个(尚未添加)到绝对正确的位置。
我观察到,每当更改第一帧中任何按钮的padx
(甚至ipadx
)值时,似乎都在更改3x3布局的位置。就像我增加“统计”按钮的padx
一样,它会将3x3布局和最底部的标签向右滑动。我觉得很奇怪,因为在完全不同的框架中完全填充某些内容不会影响任何其他框架的布局。
这里是让您了解更多问题的最小重复示例
import tkinter as tk
class MenuBar(tk.Frame):
def __init__(self,root):
tk.Frame.__init__(self,root)
class StBar(tk.Frame):
def __init__(self,root)
class Midspace(tk.Frame):
def __init__(self,root)
class MainApp:
def __init__(self,root):
self.root = root
self.StBar = StBar(self.root)
self.MenuBar = MenuBar(self.root)
self.Midspace = Midspace(self.root)
self.root.grid_rowconfigure(0,weight=3)
self.root.grid_rowconfigure(1,weight=55)
self.root.grid_rowconfigure(2,weight=2)
self.MenuBar.grid(row=0,column=0)
self.Midspace.grid(row=1,column=0)
self.StBar.grid(row=2,column=0)
self.htpb = tk.Button(self.MenuBar,text='How To Play',width=14,bg='#00f',fg='#fff')
self.htpb.grid(row=0,column=0,padx=10,ipady=5,sticky=tk.N + tk.S)
self.statb = tk.Button(self.MenuBar,text='Stats',fg='#fff')
self.statb.grid(row=0,column=1,sticky=tk.N + tk.S)
self.resb = tk.Button(self.MenuBar,text='Results',fg='#fff')
self.resb.grid(row=0,column=2,sticky=tk.N + tk.S)
self.stLabel = tk.Label(self.StBar,text='Some single line text here',fg='#fff',font=('roboto',13))
self.stLabel.pack(anchor=tk.W)
self.b1 = tk.Button(self.Midspace,text=' ',bg='#da5',fg='#250038',20),width=2,height=1)
self.b2 = tk.Button(self.Midspace,bg='#745',fg='#380601',height=1)
self.b3 = tk.Button(self.Midspace,height=1)
self.b4 = tk.Button(self.Midspace,height=1)
self.b5 = tk.Button(self.Midspace,height=1)
self.b6 = tk.Button(self.Midspace,height=1)
self.b7 = tk.Button(self.Midspace,height=1)
self.b8 = tk.Button(self.Midspace,height=1)
self.b9 = tk.Button(self.Midspace,height=1)
self.b1.grid(row=0,ipadx=40,ipady=40)
self.b2.grid(row=0,ipady=40)
self.b3.grid(row=0,ipady=40)
self.b4.grid(row=1,ipady=40)
self.b5.grid(row=1,ipady=40)
self.b6.grid(row=1,ipady=40)
self.b7.grid(row=2,ipady=40)
self.b8.grid(row=2,ipady=40)
self.b9.grid(row=2,ipady=40)
if __name__ == '__main__':
win = tk.Tk()
win.geometry('1360x710')
win.title('TicTacToe - pssolanki')
win.wm_geometry("+0+0")
win.configure(bg='#fff')
MainApp(win)
win.mainloop()
如果您需要了解其他信息,请告诉我或在以下位置查看代码 Github Repository
任何帮助或建议,我们将不胜感激。您还可以为这个问题建议一个更好的标题,因为我想不出更好的方法。
谢谢:)
解决方法
原因是所有三个框架都在同一列中。由于一列在网格中的宽度均匀,因此,如果使顶部框架变宽,则会使整个列变宽,这会影响第二和第三框架的显示方式。
我的建议是将pack
用于三个顶层框架。我将MenuBar
放在顶部,StBar
放在底部,然后将MidSpace
放在中间。