本文已参与「新人创作礼」活动,一起开启掘金创作之路。
self.layout = QGridLayout() #设置一个网状布局
self.win = QWidget() #建立一个窗口
self.win.setLayout(self.layout) #设置顶级布局管理器
self.setCentralWidget(self.win) # 设置窗口主部件
以上是在主窗口上设置一个网状格局布局,主窗口只能是QMainWindow 的窗口。
self.layout.addWidget(self.mainbutton1, 0, 0)#往网格的不同坐标添加不同的组件
后面的两个参数是指控件的在网状布局中的坐标。
layout.setSpacing(10)#设置间距
layout.setRowStretch(0, 1)#设置行列比例系数
layout.setRowStretch(1, 3)
layout.setColumnStretch(0, 1)
layout.setColumnStretch(1, 3)
setSpacing 是设置控件之间的间距
setRowStretch、setColumnStretch 是设置网状布局中的格局,整个网状占据多少行列
以下的解释及例子:
QGridLayout.setColumnStretch(列码, 比例值);
QGridLayout.setRowStretch(行码, 比例值);
# 列比 第0列与第1列之比为 1:2
layout2p1 . setColumnStretch(0, 1);
layout2p1 -> setColumnStretch(1, 2);
#行比 第0行与第1行之比为1:1
layout2p1 . setRowStretch(0, 1);
layout2p1 . setRowStretch(1, 1);
按照以上的解释,如果您设置的网状布局中的控件包含多行多列,就要进行多行的类似上面代码的声明,感觉这样就会造成代码的繁杂。
self.layout.setContentsMargins (0,40, 0, 0)
设置网状格局布局时,布局会直接将整个窗口都会覆盖,这样会造成很多的不便,以上的代码就是将布局周围的边框设置以下,第一个参数是指布局左侧边缘向右移动,第二个参数是指布局上侧边缘向下移动,第三个参数是指布局右侧边缘向左移动,第四个参数是指布局下侧边缘向上移动。移动的都是像素点,40是指40个像素点。
self.Lchild2_win1 = QWidget() #左侧控件布局
self.win1_layout3 = QGridLayout() # 创建左侧部件的网格布局层
self.Lchild2_win1.setLayout(self.win1_layout3) # 设置左侧部件布局为网格
self.Rchild2_win1 = QWidget() #右侧控件布局
self.win1_layout4 = QGridLayout() # 创建右侧部件的网格布局层
self.Rchild2_win1.setLayout(self.win1_layout4) # 设置右侧部件布局为网格
self.layout.addWidget(self.Lchild2_win1,0,0,20,2) # 左侧部件在第0行第0列,占20行2列
self.layout.addWidget(self.Rchild2_win1,0,2,20,20) # 右侧部件在第1行第3列,占20行20列
以上是将网状布局进行组合布局,布局中增加左侧部件和右侧布局,这种组合布局可以解决上面setRowStretch、setColumnStretch方法的繁杂。
Layout1.addWidget(self.child2_win1but1, 1, 0,1,2)
在新的布局中增加控件,第一二个参数设置的是控件的坐标看,第三四个参数是设置控件跨越的行数及列数。