跨越多列的qt网格布局

问题描述 投票:0回答:1

我正在尝试创建这个几何形状:

 _ ___
| |   |
|1| 3 |
|_|___|
  |_2_|

1 号盒子又高又瘦,2 号盒子又矮又宽。我无法完全正确地获得布局。当我将 1 和 2 的 rowSpan 和 columnSpan 从 0 更改为 1 时,我看到底部框处于正确的相对位置,但高度错误,并且框 1 的宽度错误。

这所以 qq 有所帮助,但没有完全解决我的问题:如何如图所示排列 QGridLayout 中的项目?

import sys
from PyQt4 import QtGui
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        textEdit1 = QtGui.QTextEdit("LHS rectangle")      
        textEdit2 = QtGui.QTextEdit("Bottom rectangle")      
        textEdit3 = QtGui.QTextEdit("Central square")      
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.addWidget(textEdit1, 0, 0, 2, 0) 
        self.gridLayout.addWidget(textEdit2, 2, 1, 0, 2)
        self.gridLayout.addWidget(textEdit3, 0, 1, 2, 2) 
        self.setLayout(self.gridLayout)
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
layout pyqt pyqt5 pyqt4 qgridlayout
1个回答
19
投票

您需要设置适当的拉伸因子来更改每行/列的空间量:

    self.gridLayout.addWidget(textEdit1, 0, 0)
    self.gridLayout.addWidget(textEdit2, 1, 1)
    self.gridLayout.addWidget(textEdit3, 0, 1)
    self.gridLayout.setColumnStretch(0, 1)
    self.gridLayout.setColumnStretch(1, 3)
    self.gridLayout.setRowStretch(0, 3)
    self.gridLayout.setRowStretch(1, 1)

结果:

© www.soinside.com 2019 - 2024. All rights reserved.