2012-08-31 48 views
2

所以我一直在试图做的是生成一个小部件列表,将它们添加到网格布局,然后将它们添加到选项卡并呈现给用户。我现在遇到的问题是,网格布局跨越每个标签的整个页面,但我没有添加很多行,因此行最终跨越整个页面,并且不会与顶部对齐。 我试着设置对齐和verticalSpacing,但没有一个改变了如何显示小部件。PyQt4 - 如何动态调整Qt布局的大小

例:

我想要的部件显示为以下几点:

WidgetName WidgetLabel 
WidgetName WidgetLabel  
WidgetName WidgetLabel 
WidgetName WidgetLabel 

相反,我得到这个:

WidgetName WidgetLabel 


WidgetName WidgetLabel 


WidgetName WidgetLabel 


WidgetName WidgetLabel 

有没有办法强制给所有元素顶部还是朝向任何方向?

回答

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() 

拉伸将吃掉所有剩余的可用空间,并将网格压扁到顶部。这样做的好处是,您不必为网格本身添加任何异常内容。拉伸是父布局的一部分。

现在setSpacing会给你一个很好的把空间推回物品的控制。

+0

这种方法完全有帮助。非常感谢您 – Orchainu

+1

没问题。如果这解决了问题,不要忘记打勾! – jdi

相关问题