PyQt5 QGroupBox - как отобразить заголовок в строке с верхней внешней строкой для QGroupBox? - PullRequest
1 голос
/ 27 апреля 2020

Этот пример:

# test1.py

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton, QRadioButton, \
    QGroupBox, QButtonGroup
from PyQt5.Qt import Qt

def main():
    app = QApplication([])
    mainForm = MainForm()
    mainForm.show()
    app.exec()
# end function

class MainForm(QWidget):

    def __init__(self):
        super().__init__()

        self.rdoRed = QRadioButton('Red')
        self.rdoGreen = QRadioButton('Green')
        self.rdoBlue = QRadioButton('Blue')

        self.vblColor = QVBoxLayout()
        self.vblColor.addWidget(self.rdoRed)
        self.vblColor.addWidget(self.rdoGreen)
        self.vblColor.addWidget(self.rdoBlue)

        self.gbColor = QGroupBox('Choose Color')

        self.gbColor.setStyleSheet('QGroupBox:title {'
                                   'subcontrol-origin: padding; }')

        self.gbColor.setLayout(self.vblColor)

        self.vboxLayout = QVBoxLayout()
        self.vboxLayout.addWidget(self.gbColor)

        self.setLayout(self.vboxLayout)
    # end function

# end class

if __name__ == '__main__':
    main()

Рендерится так в Ubuntu 18.04:

enter image description here

Мне бы хотелось Choose Color текст, в данный момент находящийся чуть выше вершины граничной линии QGroupBox, вместо этого находится на одной линии с вершиной грани QGroupBox, как показано в документации Qt:

enter image description here

Обратите внимание, как Package selection находится в соответствии с верхней границей QGroupBox, я хотел бы сделать то же самое с заголовком Choose Color в приведенном выше примере.

Это операционная системное ограничение и что я спрашиваю не возможно? Я использую Ubuntu 18.04.

Или есть параметр setStyleSheet, который я могу передать для достижения этой цели? Как вы можете видеть в приведенном выше примере, я попытался установить некоторые свойства таблицы стилей для достижения этой цели, но мне не удалось найти такое свойство. Или есть какие-то другие средства, с помощью которых это может быть достигнуто?

1 Ответ

1 голос
/ 27 апреля 2020

Попробуйте:

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton, QRadioButton, \
    QGroupBox, QButtonGroup
from PyQt5.Qt import *


class MainForm(QWidget):

    def __init__(self):
        super().__init__()

        self.rdoRed = QRadioButton('Red')
        self.rdoGreen = QRadioButton('Green')
        self.rdoBlue = QRadioButton('Blue')

        self.vblColor = QVBoxLayout()
        self.vblColor.addWidget(self.rdoRed)
        self.vblColor.addWidget(self.rdoGreen)
        self.vblColor.addWidget(self.rdoBlue)

        self.gbColor = QGroupBox('Choose Color')


        self.gbColor.setStyleSheet('''
            QGroupBox {
                background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                                  stop: 0 #E0E0E0, stop: 1 #FFFFFF);
                border: 2px solid #999999;
                border-radius: 5px;
                margin-top: 2ex;  /*leave space at the top for the title */
                font-size: 13px;
                color: black;
            }
            QGroupBox::title {
                subcontrol-origin: margin;
                subcontrol-position: top center;    /* position at the top center */
                padding: 0 3px;
                font-size: 13px;
                color: black;
            }
        ''')

        self.gbColor.setLayout(self.vblColor)

        self.vboxLayout = QVBoxLayout()
        self.vboxLayout.addWidget(self.gbColor)

        self.setLayout(self.vboxLayout)


def main():
    app = QApplication([])
    mainForm = MainForm()
    mainForm.show()
    app.exec()

if __name__ == '__main__':
    main()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...