2012-08-31 49 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

相關問題