如何在PyQt5中建立一个扁平的分组框?

时间:2019-01-28 19:09:30

标签: qt pyqt5 qgroupbox

我在Qt-docs中找到了QGroupbox类的flat属性,它说:

  

一个分组框通常由一个周围的框架组成,顶部带有一个标题。如果启用此属性,则在大多数样式中仅绘制框架的顶部;否则,将绘制整个框架。

我正在尝试构建这样一个扁平的QGroupBox,但是它似乎不起作用,正如您在this picture中看到的那样。在文档中还说:

  

注意::在某些样式中,平面和非平面分组框具有相似的表示形式,可能不像其他样式那样可区分。

这导致我进入QStyle Class,这使我有些紧张,因为我不知道如何更改QGroupBox的样式。我什至不确定这是否是这里的真正问题。正如您在下面的代码中看到的那样,我没有为QGroupBox分配特定的样式。所以,我想应该使用某种标准样式。

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, 
QVBoxLayout, QLabel


class WidgetWithFlatGroupBox(QWidget):
    def __init__(self):
        QWidget.__init__(self, flags=Qt.Widget)

        self.init_ui()

    def init_ui(self):
        self.setGeometry(300, 300, 300, 100)
        self.setWindowTitle('PyQt5 Window')

        layout = QVBoxLayout()

        layout.addWidget(self.create_groupbox(), alignment=Qt.AlignCenter)

        self.setLayout(layout)

    def create_groupbox(self):
        groupbox = QGroupBox('Flat Groupbox')
        layout = QVBoxLayout()

        label = QLabel('This Groupbox should be flat.')

        layout.addWidget(label, alignment=Qt.AlignCenter)

        groupbox.setLayout(layout)

        groupbox.setFlat(True)

        return groupbox


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = WidgetWithFlatGroupBox()
    ex.show()
    sys.exit(app.exec_())

我看了一下互联网,当然这里也是stackoverflow,但是找不到有用的东西。有谁知道如何正确使用QGroupBox类的flat属性?

1 个答案:

答案 0 :(得分:0)

抱歉,但我不知道您该怎么做:

  • border: None;

enter image description here

  • border: 1px solid #76797C;

enter image description here

尝试一下:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QGroupBox, 
                             QVBoxLayout, QLabel, QPushButton)


class WidgetWithFlatGroupBox(QWidget):
    def __init__(self):
        QWidget.__init__(self, flags=Qt.Widget)

        self.init_ui()

    def init_ui(self):
        self.setGeometry(300, 300, 300, 100)
        self.setWindowTitle('PyQt5 Window')

        layout = QVBoxLayout()
        layout.addWidget(self.create_groupbox(), alignment=Qt.AlignCenter)
        self.setLayout(layout)

    def create_groupbox(self):
        groupbox = QGroupBox('Flat Groupbox')

        layout   = QVBoxLayout()

        label = QLabel('This Groupbox should be flat.')

        button = QPushButton("This Button !!!")
        button.setFlat(True)

        layout.addWidget(label, alignment=Qt.AlignCenter)
        layout.addWidget(button, alignment=Qt.AlignCenter)

        groupbox.setLayout(layout)
#        groupbox.setFlat(True)

        return groupbox

style = '''
QGroupBox {

    border: None;               /*<-----  None              */
/*    border: 1px solid #76797C;   <-----  1px solid #76797C */

    border-radius: 2px;
    margin-top: 20px;
}

QGroupBox::title {
    subcontrol-origin: margin;
    subcontrol-position: top center;
    padding-left: 10px;
    padding-right: 10px;
    padding-top: 10px;
}
'''

if __name__ == '__main__':
    app = QApplication(sys.argv)

    app.setStyleSheet(style)

    ex = WidgetWithFlatGroupBox()
    ex.show()
    sys.exit(app.exec_())