前面已经介绍水平布局控件 QHBoxLayout和垂直布局控件 网页链接的简单使用。这章主要用来介绍更复杂但同时更具有操作性的网格布局控件QGridLayout方法的使用。
在进一步介绍之前,让我们设想一个场景——将五个元素按照图1的方式进行布置。可见,这次不仅要从列的角度,而且也要从行的角度来考虑各种元素对整体布局空间的影响。如果将每一列或者每一行的空间进行细化,那么可以利用水平布局和垂直布局嵌套的方法实现上述任务,比如,当需要放置元素二、元素三、元素四时,可以先将元素三和元素四放在一垂直布局控件内,然后将该控件和元素二再一起放入一个水平控件内(2 –> [3 4])。但是在元素数量多的情况下,这种只依靠嵌套水平布局和垂直布局控件的方法,会引起对水平控件和垂直控件过多使用的问题,比如实现图1布局时,至少需要两个垂直布局控件和两个水平布局控件(1–> [[2 –> [3 4]] 5])。并且,布局空间后期调整的困难度将随着布局控件个数的增加,而呈现增加趋势。不过,PyQt提供了应对这种局势的方法——QGridLayout网格布局控件。
图 1 元素布局
代码实现
网格布局控件QGridLayout的调用方式与水平布局控件(QHBoxLayout)、垂直布局控件(QVBoxLayout)等调用方式相同。
首先,导入控件:
然后,实列化(instantiate):
然后,通过addWidget()方法添加控件,通过addLayout()方法添加其它布局:
效果图如下:
代码解析
主要涉及QGridLayout布局控件添加元素命令参数和行或列控件分配问题。
addWidget()或addLayout()
这两个方法的第一个元素均是放入的控件,比如列子中的QLabel()控件,第二个和第三个参数设定的是控件将放入哪行哪列,比如既是将放入网格控件的第零行,第一列。第四个和第五个参数设定的是该控件将占用多少行和多少列,比如设定元素一控件将占用从第一行开始往下的所有行,即占用其它所有行,但只占用从第一列往后的一列,即不占用其它列。

setRowStretch()
该方法是在存在多余空间的前提下,设定各行相对所占空间大小,第一个参数指明特定行,第二个参数限定相对空间大小,比如该列中,通过设定和,第一行和第二行所占有空间大小的比将是1:3。如果第二个参数设定为0时,该行只占用本身的空间,该空间不随窗口大小的变化而改变。
效果视频演示
为了便于空间效果展示,为QLabel空间添加了绿色背景色,且文本设置为了居中。
完整代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183187.html