2

私がやろうとしているのは、ウィジェットのリストを生成し、それらをグリッド レイアウトに追加してから、それらをタブに追加してユーザーに提示することです。私が今抱えている問題は、グリッド レイアウトがタブごとにページ全体にまたがっていることですが、追加する行がそれほど多くないため、行がページ全体にまたがって上部に配置されないことです。配置とverticalSpacingを設定してみましたが、ウィジェットの表示方法は変わりませんでした。

元:

ウィジェットを次のように表示したい:

WidgetName WidgetLabel 
WidgetName WidgetLabel     
WidgetName WidgetLabel 
WidgetName WidgetLabel 

代わりに、私はこれを得ています:

WidgetName WidgetLabel


WidgetName WidgetLabel 


WidgetName WidgetLabel


WidgetName WidgetLabel

すべての要素を上または任意の方向に強制する方法はありますか?

4

1 に答える 1

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、アイテムにスペースを押し戻す細かい制御が可能になります。

于 2012-08-31T23:19:16.840 に答える