Pergunta

Eu tenho um QTableWidget e 6 QPushBotton quero colocá-los em um layout desta forma

enter image description here

apenas um pequeno espaçamento entre os Botões

Mas Usando QGridLayout fazer ele se parece com isso

enter image description here

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

Foi útil?

Solução

Você só precisa adicionar um Espaçador em seu layout:

enter image description here

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top