实战PyQt5:112-开源QSS样式表qdarkstyle

本文介绍了如何在PyQt5项目中通过QDarkStyleSheet库轻松切换到酷炫的深色风格,包括安装步骤、样例代码和运行效果,展示了如何为Qt应用添加个性化主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Python开发应用一个重要的优点是有丰富的第三方库,在开发过程中我们就不需要重复造轮子,而是应用好这些轮子,就可以事半功倍。下面介绍一个深色配置QSS库QDarkStyleSheet,使用它,在PyQt中,只需要简单的一个语句,就可以给用用实现炫酷的深色风格。

QDarkStyleSheet简介

QDarkStyleSheet是一个适用于Qt应用程序的最完整的深色样式表(Qt4,Qt5,PySide,PySide2,PyQt4,PyQt5,QtPy,PyQtGraph,Qt.Py)。使用下面的命令就可以安装最新的稳定版本:

pip install qdarkstyle

在PyQt5中,下面的代码演示了如何使用QDarkStyleSheet

import sys
import qdarkstyle
from PyQt5.QtWidgets import QApplication, QMainWindow
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    
    #设置样式表
    app.setStyleSheet(qdarkstyle.load_stylesheet())
    
    window.show()
    sys.exit(app.exec())

安装QDarkStyleSheet

在终端窗口下输入命令 pip install qdarkstyle 即可以安装QDarkStyleSheet, 安装完成后,显示的信息如下图(不同的版本,显示信息可能有差别)

实战PyQt5:112-开源QSS样式表qdartstyle

安装qdarkstyle

运行QDarkStyleSheet样例

QDarkStyleSheet是一个开源包,其源代码地址是:

https://github.com/ColinDuquesnoy/QDarkStyleSheet

下载其最新发布版本(写这篇文章时,最新版本为2.8.1),解压后,其中的example目录中有一个样式的演示工程,运行其文件example.py,效果如下图:

实战PyQt5:112-开源QSS样式表qdartstyle

QDarkStyleSheet开发包自带例子运行效果

测试样例

在前文的样例代码中,使用QDarkStyleSheet开发包来设置应用的样式表,其完整代码如下:

import sys
import qdarkstyle
from PyQt5.QtCore import Qt, QTimer, QDateTime, QDate, QFile
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtWidgets import (QApplication, QWidget, QMainWindow, QPushButton, QTextEdit, 
                             QGroupBox, QCheckBox, QRadioButton, QComboBox, QLabel,
                             QVBoxLayout, QHBoxLayout, QGridLayout, QStyleFactory,
                             QTabWidget, QSizePolicy, QProgressBar, QTableWidget,
                             QLineEdit, QSpinBox, QDateTimeEdit, QSlider,
                             QScrollBar, QMenu, QMenuBar, QAction, QCalendarWidget, QDial)
 
#标记控制窗口
class DarkStyleSheetDemo(QMainWindow):
    def __init__(self):
        super(DarkStyleSheetDemo, self).__init__()
        
        # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QDarkStyleSheet 演示')
        
        #应用的初始调色板
        self.origPalette = QApplication.palette()
        
        self.initUi()
        
    def initUi(self):
        self.initMenuBar()
               
        #生成要显示的部件
        self.createTopLeftGroupBox()
        self.createTopRightGroupBox()
        self.createBottomLeftTabWidget()
        self.createBottomRightGroupBox()
        self.createProgressBar()
        
        mainLayout = QGridLayout()
        mainLayout.addWidget(self.topLeftGroupBox, 1, 0) #1行0列
        mainLayout.addWidget(self.topRightGroupBox, 1, 1) #1行1列
        mainLayout.addWidget(self.bottomLeftTabWidget, 2, 0) #2行0列
        mainLayout.addWidget(self.bottomRightGroupBox, 2, 1) #2行1列
        mainLayout.addWidget(self.progressBar, 3, 0, 1, 2) ## 3行0列,占1行2列
        mainLayout.setRowStretch(1, 1)
        mainLayout.setRowStretch(2, 1)
        mainLayout.setColumnStretch(0, 1)
        mainLayout.setColumnStretch(1, 1)
        
        mainWidget = QWidget()
        mainWidget.setLayout(mainLayout)
        
        self.setCentralWidget(mainWidget)
           
    #菜单栏设置
    def initMenuBar(self):
        mBar = self.menuBar()
        
        menuFile = mBar.addMenu('文件(&F)')          
        aExit = QAction('退出(&X)', self)
        aExit.triggered.connect(self.close)
        menuFile.addAction(aExit)
 
    
    #创建左上角成组部件
    def createTopLeftGroupBox(self):
        self.topLeftGroupBox = QGroupBox('组 1')
        
        rad1 = QRadioButton('单选按钮1')
        rad2 = QRadioButton('单选按钮2')
        rad3 = QRadioButton('单选按钮3')
        rad1.setChecked(True)
        
        chk = QCheckBox('三态复选按钮')
        chk.setTristate(True)
        chk.setCheckState(Qt.PartiallyChecked)
        
        layout = QVBoxLayout()
        layout.addWidget(rad1)
        layout.addWidget(rad2)
        layout.addWidget(rad3)
        layout.addWidget(chk)
        layout.addStretch(1)
        
        self.topLeftGroupBox.setLayout(layout)
        
    #创建右上角成组部件
    def createTopRightGroupBox(self):
        self.topRightGroupBox = QGroupBox('组 2')
        
        btnDefault = QPushButton('Push Button:缺省模式')
        btnDefault.setDefault(True)
        
        btnToggle = QPushButton('Push Button: 切换模式')
        btnToggle.setCheckable(True)
        btnToggle.setChecked(True)
        
        btnFlat = QPushButton('Push Button: 扁平外观')
        btnFlat.setFlat(True)
        
        layout = QVBoxLayout()
        layout.addWidget(btnDefault)
        layout.addWidget(btnToggle)
        layout.addWidget(btnFlat)
        layout.addStretch(1)
        
        self.topRightGroupBox.setLayout(layout)
        
        
    #创建左下角Tab控件
    def createBottomLeftTabWidget(self):
        self.bottomLeftTabWidget = QTabWidget()
        self.bottomLeftTabWidget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Ignored)
        
        tab1 = QWidget()
        tableWidget = QTableWidget(10, 10)  #10行10列
        
        tab1Layout = QHBoxLayout()
        tab1Layout.setContentsMargins(5,5,5,5)
        tab1Layout.addWidget(tableWidget)
        tab1.setLayout(tab1Layout)
        
        tab2 = QWidget()
        textEdit = QTextEdit()
        textEdit.setPlainText("一闪一闪小星星,\n"
                              "我想知道你是什么.\n" 
                              "在整个世界之上, 如此的高,\n"
                              "像在天空中的钻石.\n"
                              "一闪一闪小星星,\n" 
                              "我多想知道你是什么!\n")
        
        tab2Layout = QHBoxLayout()
        tab2Layout.setContentsMargins(5, 5, 5, 5)
        tab2Layout.addWidget(textEdit)
        tab2.setLayout(tab2Layout)
        
        tab3 = QWidget()
        calendar = QCalendarWidget()
        #设置最小日期
        calendar.setMinimumDate(QDate(1900,1,1))
        #设置最大日期
        calendar.setMaximumDate(QDate(4046,1,1))
        #设置网格可见
        calendar.setGridVisible(True)
        tab3Layout = QHBoxLayout()
        tab3Layout.setContentsMargins(5, 5, 5, 5)
        tab3Layout.addWidget(calendar)
        tab3.setLayout(tab3Layout)
        
        self.bottomLeftTabWidget.addTab(tab1, '表格(&T)')
        self.bottomLeftTabWidget.addTab(tab2, '文本编辑(&E)')
        self.bottomLeftTabWidget.addTab(tab3, '日历(&C)')
        
        #self.bottomLeftTabWidget.addTab(tab1, '表格(&T)')
        #self.bottomLeftTabWidget.addTab(tab2, '文本编辑(&E)')
        
        
    #创建右下角成组部件
    def createBottomRightGroupBox(self):
        self.bottomRightGroupBox = QGroupBox('组 3')
        self.bottomRightGroupBox.setCheckable(True)
        self.bottomRightGroupBox.setChecked(True)
        
        lineEdit = QLineEdit('s3cRe7')
        lineEdit.setEchoMode(QLineEdit.Password)
        
        spinBox = QSpinBox(self.bottomRightGroupBox)
        spinBox.setValue(50)
        
        dateTimeEdit = QDateTimeEdit(self.bottomRightGroupBox)
        dateTimeEdit.setDateTime(QDateTime.currentDateTime())
        
        slider = QSlider(Qt.Horizontal, self.bottomRightGroupBox)
        slider.setValue(40)
        
        scrollBar = QScrollBar(Qt.Horizontal, self.bottomRightGroupBox)
        scrollBar.setValue(60)
        
        dial = QDial(self.bottomRightGroupBox)
        dial.setValue(30)
        dial.setNotchesVisible(True)
        
        layout = QGridLayout()
        layout.addWidget(lineEdit, 0, 0, 1, 2)  #0行0列,占1行2列
        layout.addWidget(spinBox, 1, 0, 1, 2)   #1行0列,占1行2列
        layout.addWidget(dateTimeEdit, 2, 0, 1, 2) #2行0列,占1行2列
        layout.addWidget(slider, 3, 0)  #3行0列,占1行1列
        layout.addWidget(scrollBar, 4, 0) #4行0列,占1行1列
        layout.addWidget(dial, 3, 1, 2, 1)  #3行1列,占2行1列
        layout.setRowStretch(5, 1)
        
        self.bottomRightGroupBox.setLayout(layout)
          
    #禁止窗口上的组件
    def setWidgetsDisbaled(self, disable):
        self.topLeftGroupBox.setDisabled(disable)
        self.topRightGroupBox.setDisabled(disable)
        self.bottomLeftTabWidget.setDisabled(disable)
        self.bottomRightGroupBox.setDisabled(disable)
        
    #创建进度条
    def createProgressBar(self):
        self.progressBar = QProgressBar()
        self.progressBar.setRange(0, 10000)
        self.progressBar.setValue(0)
        
        # 定时器,定时更新进度条的值
        timer = QTimer(self)
        timer.timeout.connect(self.advanceProgressBar)
        timer.start(100)
        
    #设置进度条的值        
    def advanceProgressBar(self):
        curVal = self.progressBar.value()
        maxVal = self.progressBar.maximum()
        self.progressBar.setValue(curVal + (maxVal - curVal)//100)
    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DarkStyleSheetDemo()
    
    #设置样式表
    app.setStyleSheet(qdarkstyle.load_stylesheet())
    
    window.show()
    sys.exit(app.exec())   

运行效果如下图:

实战PyQt5:112-开源QSS样式表qdartstyle

测试QDarkStyleSheet

本文知识点

  • 安装QDarkStyleSheet开发包
  • 下载QDarkStyleSheet最新版本的源代码
  • 使用QDarkStyleSheet更改程序外观

前一篇: 实战PyQt5: 111-可以使用QSS样式表的部件

<think>好的,用户想了解PyQt库的使用指南或下载方法。首先,我需要根据提供的引用内容来整理相关信息。引用3提到了PyQt5的安装和环境变量配置,以及两种开发方式:可视化UI和编程式UI。引用2和引用3都提到了使用Qt Designer和.ui文件的方法,还有pyuic工具转换.ui文件为.py文件。引用1和4提供了其他相关资源,比如QDarkStyle、PyInstaller和PyQtGraph,以及实战案例的下载地址。 用户可能是一个刚开始接触PyQt的开发者,需要基础的安装步骤和入门指南。我应该分步骤说明安装过程,包括pip安装PyQt5PyQt5-tools,并提醒设置环境变量。然后介绍两种开发方式,可视化设计和代码编写,给出示例代码帮助理解。还要提到相关工具和资源,如深色主题、打包工具和图形库,以及实战案例的参考,这样用户可以有进一步学习的资料。最后,生成相关问题引导用户深入探索,比如环境配置问题、UI设计方法和项目打包等。需要确保回答结构清晰,步骤明确,引用正确的资料来源,并在末尾添加相关问题。</think>### PyQt 库使用指南及下载方法 #### 一、PyQt 库简介 PyQt 是基于 Qt 框架的 Python 绑定库,用于开发跨平台桌面应用程序。其核心组件包括: - **QtWidgets**:提供按钮、文本框等基础控件; - **QtCore**:处理事件循环、信号与槽机制; - **QtGui**:管理图形界面元素。 #### 二、安装与配置 1. **通过 pip 安装**: ```bash pip install PyQt5 PyQt5-tools ``` 2. **环境变量配置**(针对 Qt Designer 工具): - 将 `PyQt5-tools` 的安装路径(如 `Python安装目录\Lib\site-packages\qt5_applications\Qt\bin`)添加到系统环境变量 `Path` [^3]。 #### 三、开发方式 1. **可视化 UI 设计**: - 使用 **Qt Designer** 拖放组件生成 `.ui` 文件; - 通过 `pyuic` 工具将 `.ui` 转换为 `.py` 文件: ```bash pyuic5 -x input.ui -o output.py ``` - 在代码中加载 `.ui` 文件: ```python from PyQt5 import QtWidgets, uic window = uic.loadUi("mainwindow.ui") # 直接加载 UI 文件[^2] ``` 2. **编程式 UI 开发**: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QWidget app = QApplication(sys.argv) window = QWidget() label = QLabel("Hello PyQt5!", window) window.show() sys.exit(app.exec()) ``` #### 四、资源与扩展工具 1. **推荐工具**: - **QDarkStyle**:为应用添加深色主题[^1]; - **PyInstaller**:将 PyQt 程序打包为可执行文件[^1]; - **PyQtGraph**:高性能数据可视化库[^1]。 2. **实战案例**: - 参考开源项目《PyQt 5实战指南》,包含100个案例教程[^4]。 #### 五、常见问题 - **界面卡顿**:避免在主线程执行耗时操作,使用多线程或异步处理; - **样式不生效**:检查 `.qss` 文件语法,确保样式表正确加载。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值