qss动态属性与用法总结
选择器
关于qss选择器的应用网上有很多资料,在此分享个链接可以作为参考qss选择器详解参考
Qt的集属性
使用setProperty
设置属性,并在qss中指定生效的控件。
代码示例
from PyQt5.QtWidgets import *
import sys
class MainWidget(QWidget):
def __init__(self):
super(MainWidget, self).__init__()
self.setWindowTitle('QMainWindow 模板')
self.setMinimumSize(600, 600)
layout = QVBoxLayout(self)
# Set the stylesheet
self.setStyleSheet(
"""
QPushButton#StyledButton[Test=true] {
color: #F00;
background-color: #9fa8da;
}
"""
)
btn = QPushButton('Click Me One')
# 初始化集属性
btn.setProperty('Test', True)
btn.setObjectName('StyledButton')
btn.clicked.connect(lambda: self.toggle(btn))
layout.addWidget(btn)
def toggle(self, widget):
# 获取集属性
isTest = widget.property('Test')
# 设置集属性
widget.setProperty('Test', not isTest)
# 重新加载样式表
widget.setStyle(widget.style())
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWidget()
main.show()
sys.exit(app.exec_())
使用qss设置控件属性
qt是支持通过qss来设置控件的属性的,在qss中指定时添加前缀
qproperty-
。
例如:在设置最小尺寸可以写成qproperty-minimumSize: 100px 100px;
设置控件的文本qproperty-text: '测试'
,引号可以带也可以不带,qt会自动转换格式。
代码示例
import sys
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(1000, 700)
self.setStyleSheet(
'''
QLabel#customLabel {
/*setMinimumSize属性*/
qproperty-minimumSize: 100px 100px;
qproperty-maximumSize: 100px 100px;
qproperty-text: 测试火狐;
background-color: #c04646;
}
'''
)
self.label = QLabel(self)
self.label.setObjectName('customLabel')
self.label.move(100, 100)
if __name__ == '__main__':
QApplication.setHighDpiScaleFactorRoundingPolicy(
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
)
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
在代码中修改qss中的值
python中,使用string
标准库,可以使用这个库来替换qss中的数据
代码示例
from string import Template
class QSSTemplate(Template):
delimiter = '--'
qss = '''
QLabel {
border: 1px solid --ThemeColorPrimary;
background-color: --ThemeColorPrimary;
border-image: --imagePath;
}
'''
template = QSSTemplate(qss)
map = {'ThemeColorPrimary': '#009faa', 'imagePath': 'url(./image/1.png)'}
print(template.safe_substitute(map))
# 打印内容
# QLabel {
# border: 1px solid #009faa;
# background-color: #009faa;
# border-image: url(./image/1.png);
# }