跨越多列的qt网格布局

13

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

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

第一个盒子很高很瘦,第二个盒子很短而宽。我不能完全正确地排布它们。当我将第一个和第二个盒子的rowSpan和columnSpan从0更改为1时,我看到底部的盒子在正确的相对位置,但高度不正确,而第一个盒子的宽度也不正确。

这篇文章对我的帮助很大,但并没有完全解决我的问题:如何按照所示排列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()

尝试在行跨度和列跨度(textEdit1,0,0,2,1)中将0替换为1。 - Mel
@tmoreau 在我的电脑上,它会在textEdit3下方添加一个小的textEdit2部件,而不是在其上方。 - Don Smythe
1个回答

18

您需要设置适当的拉伸系数来改变每行/列所分配空间的数量:

    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)

结果:

截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接