跳过正文
  1. 文章/
  2. Python/
  3. GUI/
  4. PySide6/

3、QSS

·1092 字·3 分钟· loading · loading · ·
Python GUI PySide6
GradyYoung
作者
GradyYoung
PySide6 - 点击查看当前系列文章
§ 3、QSS 「 当前文章 」

QSS
#

如果你学习过Web网页开发,就会发现这个名词和 CSS 特别的相似。

没错,它的语法和用途和 CSS 特别的相似。

如果在 Designer界面最上层的 MainWindow 对象 styleSheet 属性指定如下的内容

QPushButton { 
    color: red ;
    font-size:15px;
}

就会发现,所有的按钮上的文字都变成了红色的,并且字体变大了。

注意这个指定界面元素显示样式的语法,由 selectordeclaration 组成。

花括号前面的部分,比如示例中的 QPushButton 称之为 selector

selector 选择器
#

QSS selector语法几乎和 Web CSS 的 selector语法没有什么区别。

Selector 示例 说明
Universal Selector * 星号匹配所有的界面元素
Type Selector QPushButton 选择所有 QPushButton类型 (包括其子类)
Class Selector .QPushButton 选择所有 QPushButton类型 ,但是不包括其子类
ID Selector QPushButton#okButton 选择所有 对象名为 okButton 的QPushButton类型
Property Selector QPushButton[flat="false"] 选择所有 flat 属性值为 false 的 QPushButton类型。
Descendant Selector QDialog QPushButton 选择所有 QDialog 内部 QPushButton类型
Child Selector QDialog > QPushButton 选择所有 QDialog 直接子节点 QPushButton类型

Pseudo-States 伪状态
#

我们可以这样指定当鼠标移动到一个元素上方的时候,元素的显示样式

QPushButton:hover { color: red }

再比如,指定一个元素是disable状态的显示样式

QPushButton:disabled { color: red }

再比如,指定一个元素是鼠标悬浮,并且处于勾选(checked)状态的显示样式

QCheckBox:hover:checked { color: white }

样式属性
#

背景
#

可以指定某些元素的背景色,像这样

QTextEdit { background-color: yellow }

颜色可以使用红绿蓝数字,像这样

QTextEdit { background-color: #e7d8d8 }

也可以像这样指定背景图片

QTextEdit {
    background-image: url(bk1.png);
}

边框
#

可以像这样指定边框 border:1px solid #1d649c;

其中1px 是边框宽度;solid 是边框线为实线, 也可以是 dashed(虚线) 和 dotted(点)

边框可以指定为无边框 border:none

字体、大小、颜色
#

可以这样指定元素的文字字体、大小、颜色

*{  
    font-family:微软雅黑;
    font-size:15px;
    color: #1d649c;
}

宽度、高度
#

可以这样指定元素的宽度、高度

QPushButton {   
    width:50px;
    height:20px;
}

margin、padding
#

可以这样指定元素的元素的 margin;padding同理。

QTextEdit {
    margin:10px 11px 12px 13px
}

分别指定了元素的上右下左margin。

也可以使用 margin-top, margin-right, margin-bottom, margin-left 单独指定元素的上右下左的margin;padding同理。

QTextEdit {
    margin:10px 50px;
    padding:10px 50px;
}

通过代码设置QSS
#

前面的示例都是在Qt Designer软件中设置样式

如果要在代码中创建元素,则可以通过对象的setStyleSheet方法进行设置

from PySide6.QtWidgets import QApplication, QMainWindow, QWidget,QHBoxLayout

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.resize(500,300)     
        topWidget = QWidget(self)
        self.setCentralWidget(topWidget)

        main_layout  = QHBoxLayout(topWidget)

        naviBar = QWidget(self)          
        naviBar.setFixedHeight(50)

        main_layout.addWidget(naviBar)

        # 注意,这里没有使用 selector 选择范围,
        # 就表示选择的是调用 setStyleSheet的控件本身,
        # 这里就是 naviBar,而不是其任何下级控件
        naviBar.setStyleSheet('background: #3c8dbc; border:1px solid red')


app = QApplication()
mw = MainWindow()
mw.show()
app.exec()

可以通过 setObjectName 方法 给控件,设置一个id名称,然后这样。

from PySide6.QtWidgets import QApplication, QMainWindow, QWidget,QHBoxLayout,QLabel

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.resize(500,300)     
        topWidget = QWidget(self)
        self.setCentralWidget(topWidget)

        main_layout  = QHBoxLayout(topWidget)

        naviBar = QWidget(self)          
        naviBar.setFixedHeight(50)

        main_layout.addWidget(naviBar)

        naviBar.setObjectName('naviBar')
        naviBar.setStyleSheet(
'''
#naviBar {
    background: #3c8dbc; border:1px solid red; color:white
}


QLabel{
    color:yellow
}
''')

        layout = QHBoxLayout(naviBar)
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(QLabel('tttttttttt',parent=naviBar))
        layout.addStretch()

app = QApplication()
mw = MainWindow()
mw.show()
app.exec()
PySide6 - 点击查看当前系列文章
§ 3、QSS 「 当前文章 」