Как построить плоский групповой ящик в PyQt5? - PullRequest
0 голосов
/ 28 января 2019

Я обнаружил свойство flat класса QGroupbox в Qt-docs , где написано:

Групповое поле обычно состоит из окружающего фрейма с заголовком ввершина.Если это свойство включено, в большинстве стилей отрисовывается только верхняя часть кадра;в противном случае рисуется весь кадр.

Я пытаюсь построить такой плоский QGroupBox, но, похоже, он не работает, как вы можете видеть на этой картинке ,В документах также говорится:

Примечание: В некоторых стилях плоские и неплоские групповые блоки имеют похожие представления и могут быть не такими различимыми, как в других стилях.

Это приводит меня к классу QStyle , который немного меня перенапрягает, так как я понятия не имею, как изменить стиль 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, но не смог найти что-то полезное.Кто-нибудь знает, как правильно использовать свойство flat класса QGroupBox?

1 Ответ

0 голосов
/ 28 января 2019

Извините, но я не понимаю, как вам нужно:

  • 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_())
...