QGridLayout中小部件之间的间距如何在窗口大小调整时保持固定?

时间:2016-11-26 20:44:29

标签: python python-3.x layout pyqt pyqt4

我正在PyQT4中构建一个应用程序。这个应用程序的一个主要部分是维护一个小部件网格(从QLineEdit小部件分类)。我正在将小部件组织成QGridLayout

当我运行窗口时,我按照我想要的方式组织了一个网格,即

Grid (initial size)

但是,QGridLayout具有在调整窗口大小时自动填充小部件间距的属性,即

Grid (expanded size)

我希望网格在小部件之间具有相同的间距,无论我如何调整窗口大小。我已经看了,似乎无法找到如何实现这一目标。我会想象一些可以修复间距的东西,但是没有一个可能发声的功能会产生这种影响。

以下是代码段,特别是QGridLayout的部分。

class GridBlockTxtbx(QtGui.QWidget):

    def __init__(self, blocks=5, spaces=5):
        QtGui.QWidget.__init__(self)
        self.dctn_txtbx = {}
        self.blocks = blocks
        self.spaces = spaces

        # Create layout
        layout = QtGui.QGridLayout()
        # Set initial spacing between widgets to 2 pixels...
        # I want this to be fixed on window resize!
        layout.setSpacing(2)
        # Function to load the widgets into the grid
        GridBlockTxtbx._gen_block_txtbx_grid(layout, self.blocks,     
                                             self.spaces,
                                             self.dctn_txtbx)
        # Set the layout
        self.setLayout(layout)

    def _gen_block_txtbx_grid(layout, rows, cols, dctn):
        for i in range(rows):
            for j in range(cols):
                blk = GridBlockTxtbx._gen_block_txtbx(idx=(i, j))
                layout.addWidget(blk, i, j)
                dctn[i, j] = blk

1 个答案:

答案 0 :(得分:1)

将扩展间隔添加到网格布局的最后一行/列:

    vspacer = QtGui.QSpacerItem(
        QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
    layout.addItem(vspacer, last_row, 0, 1, -1)

    hspacer = QtGui.QSpacerItem(
        QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
    layout.addItem(hspacer, 0, last_column, -1, 1)