这是一段创建简单QGroupBox的代码:
from PyQt5.QtWidgets import (QApplication, QWidget,
QGroupBox, QGridLayout)
class QGroupBoxTest(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
gb = QGroupBox()
gb.setTitle('QGroupBox title')
appLayout = QGridLayout()
appLayout.addWidget(gb, 0, 0)
self.setLayout(appLayout)
self.setWindowTitle('QGroupBox test window')
self.setGeometry(300, 300, 300, 200)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
test = QGroupBoxTest()
test.show()
sys.exit(app.exec_())
这是输出对我来说的样子:
现在假设我想为它添加一些样式,我通过将此行添加到initUI方法来实现:
gb.setStyleSheet("border: 1px solid gray; border-radius: 5px")
这是输出:
从图中可以清楚地看到,标题已经在框架内部结束,现在与框架边框重叠。
所以我实际上有三个问题:
答案 0 :(得分:1)
1)可能是默认的QT展示位置,在第一张图片中使用了平台样式,并且当您更改样式表时,它会处理边框和标题展示位置什么东西,你得到丑陋的位置。
2)您可以控制"标题"使用QGroupBox:title
控件的位置,例如:
gb.setStyleSheet('QGroupBox:title {'
'subcontrol-origin: margin;'
'subcontrol-position: top center;'
'padding-left: 10px;'
'padding-right: 10px; }')
将导致类似这样的事情:
3)我的建议是为要更改的样式表属性创建不同的字符串,然后组合它们以创建所需的样式。
答案 1 :(得分:1)
即使这个问题已经得到解答,我也会发布我已经想到的关于将样式表应用到PyQt中的小部件的技术,这部分回答了我原来的问题。我希望有人会发现它很有用。
我认为将样式保存在单独的css(qss)文件中很好:
/*css stylesheet file that contains all the style information*/
QGroupBox {
border: 1px solid black;
border-radius: 5px;
}
QGroupBox:title{
subcontrol-origin: margin;
subcontrol-position: top center;
padding: 0 3px 0 3px;
}
并且python代码如下所示:
from PyQt5.QtWidgets import (QApplication, QWidget,
QGroupBox, QGridLayout)
from PyQt5.QtCore import QFile, QTextStream
class QGroupBoxTest(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
gb = QGroupBox()
gb.setTitle('QGroupBox title:')
gb.setStyleSheet(self.getStyleSheet("./styles.qss"))
appLayout = QGridLayout()
appLayout.addWidget(gb, 0, 0)
self.setLayout(appLayout)
self.setWindowTitle('QGroupBox test window')
self.setGeometry(300, 300, 300, 300)
def getStyleSheet(self, path):
f = QFile(path)
f.open(QFile.ReadOnly | QFile.Text)
stylesheet = QTextStream(f).readAll()
f.close()
return stylesheet
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
test = QGroupBoxTest()
test.show()
sys.exit(app.exec_())
产生以下输出: