Как построить плоский групповой ящик в PyQt5?
Я нашел свойство 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_())
Я взглянул на интернет, конечно же, на stackru, но не смог найти что-то полезное. Есть ли кто-нибудь, кто знает, как правильно использовать свойство flat класса QGroupBox?
2 ответа
Извините, но я не понимаю, как вам нужно сделать
border: None;
border: 1px solid #76797C;
Попытайся:
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_())