Как создать не стандартный Group Box в qt designer?

У меня есть группа кнопок, как сделать вокруг них Group Box не стандартной формы? введите сюда описание изображения

В итоги он должен не быть квадратным, а облегать эти кнопки по форме +. Возможно ли это сделать?


Ответы (1 шт):

Автор решения: S. Nick

Как вариант: QGroupBox + QGridLayout + StyleSheet.

from PyQt5.Qt import *


class Demo(QWidget):
    def __init__(self):
        super().__init__()
        
        self.groupBox = QGroupBox("Checkboxes")
        self.groupBox.setFlat(False)
        self.groupBoxLayout = QGridLayout(self.groupBox)
        self.groupBoxLayout.setSpacing(0)

        self.frameTop = QFrame()
        self.frameTop.setObjectName('frameTop')
        layoutH = QHBoxLayout(self.frameTop)
        self.btnTop = QPushButton("Top")
        self.btnTop.setFlat(True)
        layoutH.addWidget(self.btnTop)

        self.frameLeft = QFrame()
        self.frameLeft.setObjectName('frameLeft')
        layoutH = QHBoxLayout(self.frameLeft)        
        self.btnLeft = QPushButton("Left")
        self.btnLeft.setFlat(True)
        layoutH.addWidget(self.btnLeft)        

        self.frameCenter = QFrame()
        self.frameCenter.setObjectName('frameCenter')
        layoutH = QHBoxLayout(self.frameCenter)         
        self.btnCenter = QPushButton("Center")
        self.btnCenter.setFlat(True)
        layoutH.addWidget(self.btnCenter)          
        
        self.frameRight = QFrame()
        self.frameRight.setObjectName('frameRight')
        layoutH = QHBoxLayout(self.frameRight)         
        self.btnRight = QPushButton("Right")
        self.btnRight.setFlat(True)
        layoutH.addWidget(self.btnRight)         

        self.frameBottom = QFrame()
        self.frameBottom.setObjectName('frameBottom')
        layoutH = QHBoxLayout(self.frameBottom)         
        self.btnBottom = QPushButton("Bottom")
        self.btnBottom.setFlat(True)
        layoutH.addWidget(self.btnBottom)         
        
        self.groupBoxLayout.addWidget(self.frameTop, 1, 2)
        self.groupBoxLayout.addWidget(self.frameLeft, 2, 1)
        self.groupBoxLayout.addWidget(self.frameCenter, 2, 2)
        self.groupBoxLayout.addWidget(self.frameRight, 2, 3)
        self.groupBoxLayout.addWidget(self.frameBottom, 3, 2)

        layout = QVBoxLayout(self)        
        layout.addWidget(self.groupBox)


style = '''
QWidget {
    background-color: #EEC373;
}

QGroupBox {
    background-color: #EEC373;
    border: None;               
    border-radius: 2px;
    margin-top: 20px;
}
QGroupBox::title {
    subcontrol-origin: margin;
    subcontrol-position: top center;
    padding-left: 10px;
    padding-right: 10px;
    padding-top: 2px;
}

QFrame {
    background-color: #B3541E;
    border: None;               
}
#frameTop {
    border-top-left-radius:  20%;
    border-top-right-radius:  20%;
}
#frameLeft {
    border-top-left-radius:  20%;
    border-bottom-left-radius:  20%;
}
#frameRight {
    border-top-right-radius:  20%;
    border-bottom-right-radius:  20%;
}
#frameBottom {
    border-bottom-left-radius:  20%;
    border-bottom-right-radius:  20%;
}

QPushButton {
    color: #fff; 
}

'''

        
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Fusion"))
    app.setStyleSheet(style)
    w = Demo()
    w.setMinimumSize(220, 250)
    w.show()
    sys.exit(app.exec_()) 

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

→ Ссылка