QGridLayout remover o espaçamento
Pergunta
Eu tenho um QTableWidget
e 6 QPushBotton
quero colocá-los em um layout desta forma
apenas um pequeno espaçamento entre os Botões
Mas Usando QGridLayout
fazer ele se parece com isso
Código:
tab_Memory_layout = QtGui.QGridLayout()
tab_Memory_layout.setVerticalSpacing(0)
tab_Memory_layout.setAlignment(QtCore.Qt.AlignTop)
tab_Memory_layout.addWidget(self.MemoryTable, 0, 0)
tab_Memory_buttons = QtGui.QGridLayout()
tab_Memory_buttons.setSpacing(5)
tab_Memory_buttons.addWidget(self.pushButton_add_memory, 0, 0, QtCore.Qt.AlignTop)
tab_Memory_buttons.addWidget(self.pushButton_up_memory, 1, 0, QtCore.Qt.AlignTop)
tab_Memory_buttons.addWidget(self.pushButton_down_memory, 2, 0, QtCore.Qt.AlignTop)
tab_Memory_buttons.addWidget(self.pushButton_top_memory, 3, 0, QtCore.Qt.AlignTop)
tab_Memory_buttons.addWidget(self.pushButton_bottom_memory, 4, 0, QtCore.Qt.AlignTop)
tab_Memory_buttons.addWidget(self.pushButton_delete_memory, 5, 0, QtCore.Qt.AlignTop)
tab_Memory_layout.addLayout(tab_Memory_buttons, 0, 1)
self.tab_Memory.setLayout(tab_Memory_layout)
Eu tentei o setRowStretch(i, 0), setVerticalSpacing(0)
mas isso não ajuda!
Eu também usado QGridLayout
e QVBoxLayout
para os Bottons do Grupo, ele funciona, mas todos os Botões estão alinhadas no Fundo, embora eu AlignTop
para cada elemento e para o Layout
Solução
Você só precisa adicionar um Espaçador em seu layout:
O QSpacerItem fornece a classe de espaço em branco em um layout.
verticalSpacer = QSpacerItem(40, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)
tab_Memory_buttons.addItem(verticalSpacer, 6, 0, QtCore.Qt.AlignTop)
Qualquer espaço extra no layout vai ser "absorvido" pelo espaçador, que vai manter os outros widgets alinhados.
Outras dicas
Adicionar um Qlabel("") abaixo do botão excluir.Isto torna-los do jeito que você quer.