PyQt5: QVBoxLayout: как сделать три кнопки в группе? - PullRequest
0 голосов
/ 02 мая 2018

Итак, я сделал простое приложение PyQt5 с QVBoxLayout. Очевидно, что каждая кнопка, которую я добавляю, растягивается от одного конца к другому, и все они накладываются друг на друга. Как я могу добавить кнопки в QVBoxLayout, которые будут группой из трех маленьких кнопок на моем экране?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Чтобы гарантировать, что элементы не растягиваются, вы можете использовать специальный Элемент QSpacerItem.

Попробуйте:

from PyQt5 import Qt


class Widget(Qt.QWidget):

    def __init__(self):
        super().__init__()
        layout = Qt.QVBoxLayout(self)

        btn_layout = Qt.QHBoxLayout()
        # !!!
        btn_layout.addItem(Qt.QSpacerItem(0, 0, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum))

        btn1 = Qt.QPushButton("Button 1")
        btn2 = Qt.QPushButton("Button 2")
        btn3 = Qt.QPushButton("Button 3")

        btn_layout.addWidget(btn1)
        btn_layout.addWidget(btn2)
        btn_layout.addWidget(btn3)

        table = Qt.QTableWidget()
        table.setRowCount(5)
        table.setColumnCount(5)
        layout.addWidget(table)
        layout.addLayout(btn_layout)


if __name__ == '__main__':
    app = Qt.QApplication([])
    w = Widget()
    w.show()
    app.exec()

enter image description here

0 голосов
/ 02 мая 2018

Итак, вам нужно QHBoxLayout для ваших кнопок, вложенных в QVBoxLayout:

class Main(QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.vLayout = QVBoxLayout(self.centralWidget)

        self.buttonsWidget = QWidget()
        self.buttonsWidgetLayout = QHBoxLayout(self.buttonsWidget)
        self.buttons = [QPushButton(c) for c in 'ABC']
        for button in self.buttons:
            self.buttonsWidgetLayout.addWidget(button)

        self.placeHolder = QWidget()
        self.placeHolder.setMinimumWidth(480)
        self.placeHolder.setMinimumHeight(320)
        self.placeHolder.setStyleSheet('* {background: red;}')

        self.vLayout.addWidget(self.placeHolder)
        self.vLayout.addWidget(self.buttonsWidget)

Screenshot

...