pyqt5 中的网状格局布局(QGridLayout)

798 阅读2分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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)

在新的布局中增加控件,第一二个参数设置的是控件的坐标看,第三四个参数是设置控件跨越的行数及列数。