PyQt5——QSS样式表的使用

一、设置样式的方式

1.可通过setStyleSheet设置样式,如下

 label1.setStyleSheet("QWidget{background-color:#e1dfdf;border:1px solid black; height:34px; }")

如果设置的样式较多,会使代码看起来繁琐冗余。

2.采用QSS样式表

QSS样式表 类似于CSS,

创建.qss文件,常用的有以下几种类型

/*  通配符选择器,用于共性样式设置,作用于所有控件 */
*{
    color: black;
	font-size: 12pt;
	font-weight: 100;
	font-family: Microsoft YaHei;
}

/*  类型选择器,即控件类型,作用于指定类控件及其子类控件 */
/*  QAbsractButton为按钮控件 */
QAbsractButton{
    background-color: pink;
}

/*  类选择器,即控件类,作用于指定类控件 */
.QPushButton{
    background-color: #f7f0fe;
    width:100px;
    height: 30px;
    margin: 15px 200px;
}
.QLabel{
    margin: 0 200px;
}

/*  名称选择器,通过setObjectName(name_str)设置控件名称,作用于指定名称的控件(注意名称不唯一,不同控件可有相同名称) */
#btn1{
    background-color: #fef6f0;
}

/*  同上 */
QPushButton#btn2{
    background-color: #f0fefe;
}

/*  属性选择器,作用于指定“属性名”或“属性名和值”的控件 */
.QLabel[attrName]{
    color: blue;
}
.QLabel[attrName='result_right']{
    color: red;
}

/*  所属选择器,作用于所属某父控件的控件(所属关系可直接即父子,可间接如爷孙 */
QDialog#quest1 QPushButton{
    color: black;
    width:50px;
    height: 30px;
    amrgin: 0
    background-color: red;
}

/*  子选择器,作用于所属某父控件的控件(所属关系是父子) */
QDialog#quest1>QPushButton{
    color: black;
    width:50px;
    height: 30px;
    amrgin: 0
    background-color: red;
}

/*  元素选择器,作用于复合控件的指定子元素。其中相关元素参数是固定的 */
QComboBox::dropdown{
    background-color:yellow;
}

/*  多选择器,逗号分割 */
QLabel,#btn1{
    background-color:yellow;
}

在py文件中的调用方式为:

with open('mainStyle.qss', 'r', encoding='utf-8') as f:
    result = f.read()
    app.setStyleSheet(result)

二、参考示例:

将如上qss文件命名为mainStyle.qss,放在py文件的同级目录下

import sys, os
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow, QHBoxLayout, QPushButton, QWidget, QVBoxLayout, \
    QTextEdit, QDialogButtonBox, QLabel, QMessageBox, QRadioButton

class MyWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('答题')
        self.resize(600,400)
        self.setUI()

    def setUI(self):
        self.w = QWidget()
        self.layout = QVBoxLayout(self.w)
        self.setCentralWidget(self.w)

        self.singleC = QPushButton('单选题')
        self.question = singleQuestionDialog()
        self.question.resize(300,200)
        self.question.setObjectName('quest1')
        self.singleC.clicked.connect(self.question.open)
        self.multipC = QPushButton('多选题')
        self.multipC.setObjectName('btn1')
        self.chargeC = QPushButton('判断题')
        self.chargeC.setObjectName('btn2')
        self.label1 = QLabel('答对')
        self.label1.setProperty('attrName', 'result_right')
        self.label2 = QLabel('答错')
        self.label2.setProperty('attrName', 'result_eror')
        # self.w2 = QWidget()
        # self.w2_layout = QHBoxLayout(self.w2)
        # self.btn_commit = QPushButton('确定')
        # self.btn_cacel = QPushButton('取消')
        # self.w2_layout.addStretch()
        # self.w2_layout.addWidget(self.btn_commit)
        # self.w2_layout.addWidget(self.btn_cacel)
        # self.w2_layout.addStretch()

        self.layout.addStretch(2)
        self.layout.addWidget(self.singleC)
        self.layout.addWidget(self.multipC)
        self.layout.addWidget(self.chargeC)
        self.layout.addWidget(self.label1)
        self.layout.addWidget(self.label2)
        # self.layout.addWidget(self.w2)
        self.layout.addStretch(3)

    def singleQuestion(self):
        self.question = singleQuestionDialog()
        self.show()

class singleQuestionDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("单选题")
        self.resize(100,200)

        QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel

        # connect buttons to slots to set result value of the dialog
        self.buttonBox = QDialogButtonBox(QBtn)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        self.layout = QVBoxLayout()
        self.message = QLabel("单选题1:请选出一个你认为正确的答案?")
        self.answerA = QRadioButton('A. 选项A')
        self.answerB = QRadioButton('B. 选项B')
        self.answerC = QRadioButton('C. 选项C')

        self.layout.addWidget(self.message)
        self.layout.addWidget(self.answerA)
        self.layout.addWidget(self.answerB)
        self.layout.addWidget(self.answerC)
        self.layout.addWidget(self.buttonBox)
        self.setLayout(self.layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 应用样式表
    with open('mainStyle.qss', 'r', encoding='utf-8') as f:
        result = f.read()
        app.setStyleSheet(result)
    myWin = MyWin()
    myWin.show()
    sys.exit(app.exec_())

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值