PyQt5 自定义控件样式
一、qss样式表的创建
在PyCharm中创建.qss类型的文件 项目 -> new -> file -> xxx.qss
语法规则:
控件类型名#ObjectName[Property=“value”]{
属性:值; //切记分号
}
其中#后及[ ]里的内容非必选项
- 若想让所有的QLabel文本内容字体都是20号
QLabel{
font-size:20px;
}
- 若想让所有ObjectName为label的QLabel文本内容字体都是20号
QLabel#label{
font-size:20px;
}
- 若想让所有ObjectName为label且"variety"属性为"normal"的QLabel文本内容字体都是20号
QLabel#label[variety="normal"]{
font-size:20px;
}
二、qss样式表的使用
通过QtWidgets下的qApp.setStyleSheet()函数来设置
with open(路径, 读文件) as f:
qApp.setStyleSheet(f.read())
代码示例:
UI文件 Test_1216.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MyDialog(object):
def setupUi(self, MyDialog):
MyDialog.setObjectName("MyDialog")
MyDialog.resize(714, 455)
self.label = QtWidgets.QLabel(MyDialog)
self.label.setGeometry(QtCore.QRect(110, 50, 191, 51))
self.label.setObjectName("label")
self.retranslateUi(MyDialog)
QtCore.QMetaObject.connectSlotsByName(MyDialog)
def retranslateUi(self, MyDialog):
_translate = QtCore.QCoreApplication.translate
MyDialog.setWindowTitle(_translate("MyDialog", "案例"))
self.label.setText(_translate("MyDialog", "这是一个标签"))
注意:self.label.setObjectName("label")
业务逻辑文件 Test_1216_main.py
from PyQt5.QtWidgets import QWidget, QLabel,QApplication, qApp
from Test_1216 import Ui_MyDialog
class MymainWindow(QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_MyDialog()
self.ui.setupUi(self)
with open('./stylesheet.qss', 'r') as file:
qApp.setStyleSheet(file.read())
self.label = QLabel(self)
self.label.move(200,200)
self.label.setText('继承使得子类具有和父类相同的共性,却有各自的特性')
# self.label.setStyleSheet("font-size: 30px; color: red")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
MainWindow = MymainWindow()
MainWindow.show()
sys.exit(app.exec_())
注意:当添加了不同的控件
self.btn = QPushButton(self)
self.btn.setText('按钮')
样式表内容 stylesheet.qss
让所有的QLabel文本内容字体都是20号, 颜色为红色
QLabel {
font-size: 20px; color: red;
}
让所有ObjectName为label的QLabel文本内容字体都是30号,颜色为蓝色
QLabel#label{
font-size: 30px; color: blue;
}
在不同的控件上设置样式
QPushButton{
font-size: 30px; color: green;
}
QLabel{
font-size: 20px; color: blue;
}
QLabel#label{
font-size: 10px; color: red;
}
效果展示: