PyQt4 - 如何动态调整Qt布局的大小

Orc*_*inu 2 pyqt4

所以我一直在尝试做的是生成一个小部件列表,将它们添加到网格布局,然后将它们添加到选项卡并呈现给用户.我现在遇到的问题是网格布局跨越每个标签的整个页面,但我没有添加那么多行,因此行最终跨越整个页面而不会对齐到顶部.我尝试设置alignment和verticalSpacing,但没有一个改变了小部件的显示方式.

例如:

我希望小部件显示如下:

WidgetName WidgetLabel 
WidgetName WidgetLabel     
WidgetName WidgetLabel 
WidgetName WidgetLabel 
Run Code Online (Sandbox Code Playgroud)

相反,我得到这个:

WidgetName WidgetLabel


WidgetName WidgetLabel 


WidgetName WidgetLabel


WidgetName WidgetLabel
Run Code Online (Sandbox Code Playgroud)

有没有办法强制所有元素到达顶部或任何所需的方向?

jdi*_*jdi 5

默认情况下,布局将占用其父窗口小部件的完整空间.我通常会做的是将网格放在另一个布局中,并在最后添加一些拉伸.

class Widget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        mainLayout = QtGui.QVBoxLayout(self)

        grid = QtGui.QGridLayout()
        # you can directly control the spacing here
        grid.setSpacing(20)

        for row in xrange(5):
            grid.addWidget(QtGui.QLabel("Text"), row, 0, 
                1, 1, QtCore.Qt.AlignTop)
            grid.addWidget(QtGui.QLabel(str(row)), row, 1, 
                1, 1, QtCore.Qt.AlignTop)

        mainLayout.addLayout(grid)
        mainLayout.addStretch()
Run Code Online (Sandbox Code Playgroud)

拉伸会占用剩余的可用空间并将网格压到顶部.这样做的好处是,您不必向网格本身添加任何其他异常.拉伸是父布局的一部分.

现在,setSpacing它将为您提供精确控制,将空间推回到物品中.