即使使用setSpacing(0),窗口小部件之间也会出现空白

时间:2017-08-27 13:57:48

标签: python qt layout pyqt

<FilesMatch ".+\.*$">
SetHandler !
</FilesMatch>

上面的代码只显示了两个小部件(from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys data = {'dia': 23, 'mes': 8, 'ano': 2017} class FormConfigBkpBD(QWidget): senha = None pathLine = None def __init__(self, parent=None,instancia=None): super(FormConfigBkpBD, self).__init__(parent) mainLayout = QVBoxLayout() mainLayout.setSpacing(0) mainLayout.setContentsMargins(0, 0, 0, 0) self.senha = QLineEdit() self.senha.setEchoMode(QLineEdit.Password) self.senha.setFixedSize(385, 25) self.pathLine = QLineEdit() self.pathLine.setFixedSize(355,25) self.senha.setContentsMargins(0,0,0,0) self.pathLine.setContentsMargins(0,0,0,0) mainLayout.addWidget(self.pathLine,0,Qt.AlignTop) mainLayout.addWidget(self.senha,0,Qt.AlignTop) self.setWindowTitle("Configuração de Backup - Banco de Dados") self.setFixedSize(460,640) self.setLayout(mainLayout) def main(): app = QApplication(sys.argv) bd = FormConfigBkpBD() bd.show() app.exec() if __name__ == "__main__" : main() ),原始窗口有更多的小部件,这仅适用于此处发布。 为什么,即使QLineEditsetSpacing(0)小部件之间有空格?

1 个答案:

答案 0 :(得分:2)

这是因为窗口的固定大小与您使用的布局之间的组合。垂直布局尝试垂直分布(除非另有说明)其所有子项,并填充整个窗口。

这里有两个小部件,所以第一个进入第一个单元格,第二个进入第二个单元格。由于您尚未设置任何对齐,因此存在默认行为,即每个单元格的左上角是窗口小部件所在的位置。其余的只是填充布局所属的父窗口的可用空间。

如果您不想在小部件之间留出空间

  • 删除窗口的固定大小

    enter image description here

  • 或在布局中放置更多小部件,直到它“满”为止。

第一个选项可能不是您想要做的(否则您可能不会首先将其设置为固定大小)。第二个可以通过简单地使用QSpacerItem(垂直一个)来实现,它将为您处理空白空间并将小部件推送到您想要的位置:

mainLayout.addStretch(1)

如果您需要更好地控制其行为,也可以手动添加间隔:

self.spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) # or Fixed
mainLayout.addItem(self.spacer)