PYQT5 QGridLayout及setRowStretch、setColumnStretch用法简探

一、新建六个label,命名为1~6,然后显示,代码和运行结果如下

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0)                       #label布置在第0行第0例
    grid.addWidget(label2, 1, 0)                       #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                       #label布置在第1行第1例
    grid.addWidget(label4, 2, 0)                       #label布置在第2行第0例
    grid.addWidget(label5, 2, 1)                       #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                       #label布置在第3行第0例

    win.show()                     #显示窗口
    sys.exit(app.exec_())

二、修改label1占据四列,代码和结果如下。

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)                #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                       #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                       #label布置在第1行第1例
    grid.addWidget(label4, 2, 0)                       #label布置在第2行第0例
    grid.addWidget(label5, 2, 1)                       #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                       #label布置在第3行第0例

    win.show()                     #显示窗口
    sys.exit(app.exec_())

 

    程序运行结果,其他label都被压缩,label1被拉伸4倍,因为其他label最多只占两例,因此在整个窗口比例中其他窗口只占一半

三、在步骤二基础上修改label4占据两行,代码和结果如下。

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)                 #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                       #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                       #label布置在第1行第1例
    grid.addWidget(label4, 2, 0, 2, 1)                 #label布置在第2行第0例,占据2行1例
    grid.addWidget(label5, 2, 1)                       #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                       #label布置在第3行第0例

    win.show()                     #显示窗口
    sys.exit(app.exec_())

程序运行结果,label4占据两例,其他label保持不变

四、使用setRowStretch方法进对行进行拉伸,代码和结果如下

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)               #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                       #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                       #label布置在第1行第1例
    grid.addWidget(label4, 2, 0, 2, 1)                #label布置在第2行第0例,占据2行1例
    grid.addWidget(label5, 2, 1)                       #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                       #label布置在第3行第0例

    grid.setRowStretch(0, 1)                 #使用setRowStretch行拉伸,将第0行拉伸1倍

    win.show()                     #显示窗口
    sys.exit(app.exec_())

被程序运行结果,整个窗口绝大部分都label1占据

五、在步骤四的基础上,想要恢复步骤三的显示内容,则需要将第一行都做一次拉伸,代码和结果如下

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)               #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                     #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                     #label布置在第1行第1例
    grid.addWidget(label4, 2, 0, 2, 1)               #label布置在第2行第0例,占据2行1例
    grid.addWidget(label5, 2, 1)                     #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                     #label布置在第3行第0例

    grid.setRowStretch(0, 1)                 #使用setRowStretch行拉伸,将第0行拉伸1倍
    grid.setRowStretch(1, 1)                 #使用setRowStretch行拉伸,将第1行拉伸1倍
    grid.setRowStretch(2, 1)                 #使用setRowStretch行拉伸,将第2行拉伸1倍
    grid.setRowStretch(3, 1)                 #使用setRowStretch行拉伸,将第3行拉伸1倍

    win.show()                     #显示窗口
    sys.exit(app.exec_())

六、对第一例进行例拉伸,代码和结果如下

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)               #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                     #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                     #label布置在第1行第1例
    grid.addWidget(label4, 2, 0, 2, 1)               #label布置在第2行第0例,占据2行1例
    grid.addWidget(label5, 2, 1)                     #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                     #label布置在第3行第0例

    grid.setColumnStretch(0,1)                       #对第0例拉伸1倍

    win.show()                     #显示窗口
    sys.exit(app.exec_())

 

七、与行一样,如果想要恢复步骤五的显示结果,需要对每例都进行拉伸操作,代码和结果如下

import sys
from PyQt5.QtWidgets import QLabel,QGridLayout,QWidget,QApplication

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QWidget()                   #新建一个窗口
    win.resize(640, 480)              #窗口大小为640X480
    grid = QGridLayout(win)

    label1 = QLabel("11111111")           #新建 label1,命名为11111111
    label2 = QLabel("22222222")           #新建 label1,命名为22222222
    label3 = QLabel("33333333")           #新建 label1,命名为33333333
    label4 = QLabel("44444444")           #新建 label1,命名为44444444
    label5 = QLabel("55555555")           #新建 label1,命名为55555555
    label6 = QLabel("66666666")           #新建 label1,命名为66666666

    label1.setStyleSheet("background-color:red")          #label1设置为红色
    label2.setStyleSheet("background-color:green")        #label2设置为绿色
    label3.setStyleSheet("background-color:blue")         #label3设置为蓝色
    label4.setStyleSheet("background-color:yellow")       #label4设置为黄色
    label5.setStyleSheet("background-color:pink")         #label5设置为粉色
    label6.setStyleSheet("background-color:purple")       #label6设置为紫色

    grid.addWidget(label1, 0, 0, 1, 4)               #label1布置在第0行第0例,占据4行1例

    grid.addWidget(label2, 1, 0)                     #label布置在第1行第0例
    grid.addWidget(label3, 1, 1)                     #label布置在第1行第1例
    grid.addWidget(label4, 2, 0, 2, 1)               #label布置在第2行第0例,占据2行1例
    grid.addWidget(label5, 2, 1)                     #label布置在第2行第0例
    grid.addWidget(label6, 3, 1)                     #label布置在第3行第0例

    grid.setColumnStretch(0, 1)                       ##对第0例拉伸1倍
    grid.setColumnStretch(1, 1)
    grid.setColumnStretch(2, 1)
    grid.setColumnStretch(3, 1)


    win.show()                     #显示窗口
    sys.exit(app.exec_())

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值