QSS的UI美化(五)

QSS子控件

QSS子控件實際上也是一種選擇器,其應用在一些複合控件上,典型的如QComboBox,該控件的外觀是,有一個矩形的外邊框,右邊有一個下拉箭頭,點擊之後會彈出下拉列表,例如:

QComboBox:drop-down {image:url(dropdown.png)}

上面的樣式指定所有的QComboBox下拉箭頭的圖片是自定義的,圖片文件爲dropdown.png
::drop-down子控件選擇器可以與上面提到到的選擇器一起聯合使用,例如

QComboBox#myQComboBox::drop-down {image:url(dropdown.png)}

表示爲指定的id爲myQComboBox的QComboBox控件的下拉箭頭自定義圖片,需要注意的是,子控件選擇器實際上是選擇複合控件的一部分,也就是對複合控件的一部分應用樣式,例如爲QComboBox下拉箭頭指定圖片,而不是QComboBox本身指定圖片

QSS僞狀態

QSS僞狀態選擇器是以冒號開頭的一個選擇表達式,例如hover,表示當鼠標指針經過時的狀態,僞狀態選擇器限制了當控件處於某種狀態纔可以使用的QSS規則,僞狀態只能描述一個控件或者一個複合控件的自控件的狀態,所以它只能放在選擇器的最後面,例如

QComboBox:hover{background-color:red;}
表示到鼠標經過QComboBox時.其背景色指定爲紅色

該僞狀態:hover描述的是QComboBox的狀態,除可以描述所選擇的控件外,僞狀態還可以描述子控件選擇器所選擇的複合控件的子控件的狀態

QComboBox::drop-down:hover{background-color:red}
表示當鼠標指針經過QComboBox的下拉箭頭時,該下拉箭頭的背景色變成紅色

此外,僞狀態還可以用一個感嘆號來表示狀態,例如,:hove表示鼠標指針經過的狀態,:!hover表示鼠標沒有經過的狀態,多種僞狀態可以同時使用,例如

QCheckBox:hover:checked{color:white}
表示當鼠標指針經過一個選中的QCheckBox時,設置其文字的前景色爲白色

QSS提供了很多的僞狀態,一些僞狀態只能用在特定的控件上,具體有哪些僞狀態,在pyqt幫助文檔中有詳細的列表

實例:QComboBox的樣式

import sys
from PyQt5.QtWidgets import *

class WindowDemo(QWidget):
    def __init__(self):
        super(WindowDemo, self).__init__()
        self.initUI()
    def initUI(self):
        #實例化列表控件
        combo=QComboBox(self)
        #設置列表控件的名稱
        combo.setObjectName('myQComboBox')

        #添加條目到列表控件
        combo.addItem('Window')
        combo.addItem('Ubuntu')
        combo.addItem('Red Hat')
        #控件移動到指定位置
        combo.move(50,50)
        #設置窗口的標題與初始窗口的屬性
        self.setGeometry(250,200,320,150)
        self.setWindowTitle('QComboBox樣式')

        #設置樣式

        qssStyle='''
        QComboBox#myQComboBox::drop-down{
        image:url(./images/dropdown.png)
        } 
        QComboBox#myQComboBox::drop-down:hover{
        background-color:red
        }
        '''
        self.setStyleSheet(qssStyle)
if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=WindowDemo()
    win.show()
    sys.exit(app.exec_())

運行程序,運行效果如下
自定義下拉箭頭圖片鼠標指針滑過下拉箭頭時

QDarkStyleSheet

除自己編寫的QSS樣式表,網上還有很多質量很高的QSS樣式表。比如QDarkStyleSheet,它是一個用於PyQt應用程序的深黑色樣式表

安裝

pip install qdarkstyle

實例:QDarKStyleSheet的顯示界面


import logging
import sys
from PyQt5 import QtWidgets, QtCore
# make the example runnable without the need to install
from os.path import abspath, dirname
sys.path.insert(0, abspath(dirname(abspath(__file__)) + '/..'))

import qdarkstyle
import ui.example_pyqt5_ui as example_ui


def main():
    """
    Application entry point
    """
    logging.basicConfig(level=logging.DEBUG)
    # create the application and the main window
    app = QtWidgets.QApplication(sys.argv)
    window = QtWidgets.QMainWindow()

    # setup ui
    ui = example_ui.Ui_MainWindow()
    ui.setupUi(window)
    ui.bt_delay_popup.addActions([
        ui.actionAction,
        ui.actionAction_C
    ])
    ui.bt_instant_popup.addActions([
        ui.actionAction,
        ui.actionAction_C
    ])
    ui.bt_menu_button_popup.addActions([
        ui.actionAction,
        ui.actionAction_C
    ])
    item = QtWidgets.QTableWidgetItem("Test")
    item.setCheckState(QtCore.Qt.Checked)
    ui.tableWidget.setItem(0, 0, item)
    window.setWindowTitle("QDarkStyle example")

    # tabify dock widgets to show bug #6
    window.tabifyDockWidget(ui.dockWidget1, ui.dockWidget2)

    # setup stylesheet
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())

    # auto quit after 2s when testing on travis-ci
    if "--travis" in sys.argv:
        QtCore.QTimer.singleShot(2000, app.exit)

    # run
    window.show()
    app.exec_()


if __name__ == "__main__":
    main()

運行效果圖
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章