PyQt5: QVBoxLayout: как сделать три кнопки группой?

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


person A.Bg    schedule 02.05.2018    source источник
comment
У вас есть пример? Набросок того, чего вы хотите достичь?   -  person fferri    schedule 02.05.2018
comment
Да! Я нашел это в Интернете (не могу опубликовать свой пример кода, потому что я изменил его, пытаясь добиться того, чего хочу) [ссылка]bogotobogo.com/Qt/images/LayoutsWithoutDesigner/ вверху — это то, чего я хочу добиться, а три кнопки внизу — это то, чего я достиг   -  person A.Bg    schedule 02.05.2018


Ответы (2)


Итак, вам нужен 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)

Скриншот

person fferri    schedule 02.05.2018
comment
ну, у меня там интерактивный экран, поэтому кнопки должны располагаться под ним (то есть QVBoxLayout), иначе они будут располагаться сбоку от этого экрана - person A.Bg; 02.05.2018
comment
У меня там есть vtk renderwindowinteractor, и мне нужно три кнопки, чтобы зайти под него. До сих пор я мог получить только три длинные кнопки прямо под ним с раскладкой H или маленькие сбоку с раскладкой V. Но я хочу, чтобы под ним было три маленьких - person A.Bg; 02.05.2018
comment
Потрясающие! Большое спасибо, добавил в мой код, и это сработало - person A.Bg; 02.05.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()

введите здесь описание изображения

person S. Nick    schedule 02.05.2018