PyQt / Qt Designer:将元素保持在一起

时间:2014-06-02 11:44:57

标签: pyqt qt-designer

我正在将一个小部件放在PyQt的Qt Designer中,但在应用网格布局后,努力使元素尽可能保持彼此靠近。

例如,在此布局中,我将问号(用作工具提示)设置为距离每个输入元素的右边缘2 px:

enter image description here

当我应用网格布局时,这些空间大量(并且在所有3条线上不一致)增加:

enter image description here

我尝试将水平布局应用于元素行,但即使这样也会导致元素以不一致的方式更加水平地展开。

我错过了一些明显的东西吗?有没有办法强迫元素与相邻元素保持一定距离?

编辑/更新

感谢three_pineapples' suggestion,我已经放了一些水平间隔(虽然我不确定我是否按照预期的方式完成了它?)

enter image description here

这在一定程度上解决了它,但是:

  • 元素和问号之间的差距现在是一致的,但所有行都是6 px!
  • 其他元素之间的差距不一致(QLineEdit和文件浏览按钮之间的差距是12 px,而不是我想要的5)
  • 间隔符的高度与行的高度相同,但QtDesigner似乎已添加到文件选择行上方的奇怪的孤立行中。虽然我确定没什么可担心的,但我更愿意了解事情是如何运作的,以及为什么这样做......

1 个答案:

答案 0 :(得分:0)

您是否尝试在QGridLayout上调用setSpacing(0)来减少项目之间的间距? (如果您愿意,还有setHorizo​​ntalSpacing(x)和setVerticalSpacing(y))。此外,setContentsMargins(0, 0, 0, 0)将消除网格上的外边距,我认为这不是你在这里寻找的,但可能与绊倒这个的人有关或有用。

段:

from PyQt4 import QtGui

class MyClass(QtGui.QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        p1 = QtGui.QPushButton('One', self)
        p2 = QtGui.QPushButton('Two', self)
        p3 = QtGui.QPushButton('Three', self)
        p4 = QtGui.QPushButton('Four', self)
        grid = QtGui.QGridLayout(self)
        grid.addWidget(p1, 0, 0)
        grid.addWidget(p2, 0, 1)
        grid.addWidget(p3, 1, 0)
        grid.addWidget(p4, 1, 1)
        grid.setContentsMargins(0, 0, 0, 0)  # this seems to be the outer padding of the grid
        grid.setHorizontalSpacing(0)  # I think this is what you're looking for
        grid.setVerticalSpacing(0)
        # grid.setSpacing(0)  # this would set vertical & horizontal spacing at once
        self.setLayout(grid)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyClass()
    window.show()
    sys.exit(app.exec_())

我不习惯使用QtDesigner,但如果您愿意,应该有方法在那里设置这些属性。