PyQt5中QSS设置全局StyleSheet的学习

2023-05-16

这阵子在学习PyQt5,在学习过程中查阅很多资料和网站内容。现在希望一边学习,一边作笔记,并分享在互联网上,能够给别人带来方便的同时自己也提升得更快。


这篇博文主要总结PyQt5中QSS的使用方法和存在的一些问题


先新建一段代码初始化一个UI

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QTextBrowser, QWidget, QFrame


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        TextBr = QTextBrowser(self)
        TextBr.setGeometry(400, 300, 300, 100)
        TextBr.setText('Test')
        btn = QPushButton('btn', self)
        frm = QFrame(self)
        frm.setGeometry(100, 0, 100, 100)
        self.setGeometry(300, 200, 1000, 500)
        self.setWindowTitle('QSS learning')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

得到下面的窗口
这里写图片描述
我们的代码中总共有4个UI对象,一是ex = Example()所产生的QWidget,二是TextBr,三是btn,四是frm。在窗口中,由于frm没有被设置内容而不可见。


接下来,我们在代码中添加一行代码来设置StyleSheet,修改的代码片段如下:

        self.setWindowTitle('QSS learning')
        self.setStyleSheet('QWidget{background-color:rgb(0,0,0)}') #增加的代码
        self.show()

此时运行程序出现的效果是
这里写图片描述

self.setStyleSheet('QWidget{background-color:rgb(0,0,0)}')

self指的是我们所建立的ex = Example(),在这个继承于Qwidget的类被初始化时,在initUI还新建了TextBr,btn和frm三个对象。所以self.setStyleSheet()是可以设置ex整个窗口的样式(StyleSheet)的。而当我们把样式设置成QWidget{background-color:rgb(0,0,0)}时,发现所有四个对象的背景颜色全都设置成了黑色,这其实是我们不想看到的结果。究其原因,是由于QTextBrowser, QPushButton, QFrame这三个类都继承自QWidget的缘故。


接下来,我们将代码再进行更改,将

class Example(QWidget):

中的QWidget更改为QMainWindow

class Example(QMainWindow): #new

并且将

self.setStyleSheet('QWidget{background-color:rgb(0,0,0)}')

中的QWidget也替换掉

self.setStyleSheet('QMainWindow{background-color:rgb(0,0,0)}')

得到效果如下:
这里写图片描述
此时可以看到,TextBr和btn得到保持,而frm依然没有显示出来。所以此时,背景颜色变成黑色的其实只有QMainWindow类型的主窗口ex。


我们紧接着可以对余下的三个类型的对象进行设置

        self.setStyleSheet('QMainWindow{background-color:rgb(0,0,0)}'
                           'QPushButton{background-color:rgb(255,0,0)}'
                           'QFrame{background-color:rgb(0,255,0)}')

我们在同一个设置中增加两段QSS字符串,得到效果如下:
这里写图片描述
在此发现,btn被正确地设置成了红色,而frm也由于被设置成了绿色而变得可见。但没想到的是,TextBr也被设置成了绿色。可以猜测,QTextBrowser是继承自QFrame的。
继续将样式设置代码修改成

        self.setStyleSheet('QMainWindow{background-color:rgb(0,0,0)}'
                           'QPushButton{background-color:rgb(255,0,0)}'
                           'QFrame{background-color:rgb(0,255,0)}'
                           'QTextBrowser{background-color:rgb(0,0,255)}')

增加了对QTextBrowser类的设置后,TextBr终于被设置成了蓝色。
这里写图片描述


通过演示,我们已经知道了设置全局QSS的入口在主窗口的setStyleSheet()函数,在其中添加QSS语法,就可以设置此对象中所有样式。
因为在setStyleSheet()函数中,实际输入的参数是字符串类型,所以完全可以把QSS语法存在文档里,再用程序读取。
而我们需要注意的是,由于在txt等文档中编辑QSS时,实际格式如下:
这里写图片描述
在用python读取时,不会是一个字符串,所以需要一些方法,比如以下代码可以正常读取txt并将内容转化成字符串

        with open('C:\\Users\\Martin\\Desktop\\qss1.txt') as file:
            str = file.readlines()
            str =''.join(str).strip('\n')
        self.setStyleSheet(str)
        self.show()

其中str在从readlines()读取到的数据是以list存在的,并且每行后面会带有\n,所以用str =”.join(str).strip(‘\n’),将内容转换成“干净”的字符串。通过把QSS文件内容读取为字符串这样的思路,我们可以自由发挥,方便地设置窗口UI的整体式样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt5中QSS设置全局StyleSheet的学习 的相关文章

  • 如何在 QTableWidget 中将列中的所有项目对齐到中心

    我正在使用 PyQt5 并使用 PyCharm 如何将一列下的所有单元格居中对齐 下面的代码似乎有效 但仅适用于一个单元格 即标题 我应该更改或添加什么 item3 QtWidgets QTableWidgetItem Item Name
  • 如何使用表单上的按钮向 QTabWidget 添加选项卡?

    我决定为我的脚本编写视觉形式 这个想法是有一个按钮可以将新选项卡添加到 QTabWidget 它不起作用 我找不到一个好的例子 我使用PyQt5 这是我尝试过的一部分 import sys from PyQt5 QtGui import Q
  • MainWindow 对象没有属性“connect”

    我想知道是否有人可以帮助我解决有关 PyQt5 中插槽连接的问题 下面的代码片段将告诉你我的问题是什么 class MainWindow QMainWindow def init self super MainWindow self ini
  • 在 PyQt5 中,getOpenFileName 不会导致 Pycharm 中弹出文件选择[重复]

    这个问题在这里已经有答案了 使用教程点中的一段示例代码 我无法使用该代码打开文件对话框 我正在使用 Ubuntu MATE 16 04 python 版本 3 7 4 PyQt5 版本 5 13 1 和以下代码 import sys fro
  • 如何更改默认的 javadoc 样式表?

    是否有命令行选项来更改 javadoc 创建的样式表文件 我想使用我自己的 css 文件 默认的蓝色很无聊 我尝试了 stylesheet 选项 但不支持它 是的 这是可能的 而且实际上非常简单 例如 如果您查看 Mockito 的 jav
  • PyQt5:我无法理解 QGraphicsScene 的 setSceneRect(x, y, w, h)

    我看到有人说如果你想把QGraphicsScene的坐标原点放在QGraphicsView的原点 即左上角 您需要让它们具有相同的大小 所以这就是我所做的 import sys from PyQt5 QtWidgets import QAp
  • 想要根据组合框和搜索栏过滤行我还想使用 select 取消全选复选框进行多选并在 pyQt5 中进行搜索

    在这里 我有一个 tableView 上传按钮 两个组合框 当用户上传 csv 文件时将自动填充 还有一个搜索栏 QLineEdit 2 我想根据两个复选框和搜索栏 QLineEdit 2 过滤行 我还想让组合框通过全选进行多选 并通过搜索
  • 如何在QTextEdit中自动滚动文本(动画效果)?

    我想问一下如何让QTextEdit中的文字滚动 达到动画效果 动画效果应该类似于视频中所示的效果 https www youtube com watch v MyeuGdXv4XM https www youtube com watch v
  • 使 QLabel 可点击

    我有一个充满 QPixmap 的 Qlabel 我想在单击该标签后启动一个进程 函数 我扩展了 QLabel 类 如下所示 from PyQt5 QtCore import from PyQt5 QtWidgets import from
  • style.css 在 WordPress 中不起作用

    我的 WordPress 有问题 我已经创建了所有需要的文件 包括 style css index php 等 但页面没有样式 在标题中 除其他外 我把这个
  • pyqt5中主窗口关闭时如何关闭其他窗口

    我想在主窗口关闭时关闭主窗口打开的所有其他窗口 请在下面找到最小值 我正在测试的代码 from PyQt5 QtWidgets import QApplication QMainWindow QPushButton QLabel QVBox
  • QDataWidgetMapper;将 TableWidget 映射到模型

    我没有找到任何文档显示 QDataWidgetMapper 实际上适用于哪些小部件 也没有找到任何使用 QTableWidget 进行映射的实现 它绝对适用于 QLineEdit 和 QComboBoxes 它们是输入小部件 但是是否可以映
  • 为什么需要重置浏览器?

    好吧 我知道这可能不是最好的标题why我们需要重置浏览器 因为浏览器有不同的默认设置 我的问题太长 无法放入标题中 如果每个人 90 的时间都需要使用重置样式表 为什么浏览器需要设置默认样式 无论如何我们都会删除它们 对吗 因为某些规则默认
  • 在 QComboBox 中显示项目,但不在其弹出列表中显示项目

    我有一些代码使用组合框来显示产品列表 我想在组合框中显示 选择产品 products Select product 223 51443 7335 但我不希望用户能够选择 选择产品 项 我只是想让用户知道这个组合框是用来选择产品的 我不想使用
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 如何在 QGraphicsView 中制作 2 层?

    在下面的程序中 加载背景图像并在其上绘制 但是 我遇到了一个问题 在这个程序中 当我使用 橡皮擦 工具时 背景图像也被删除了 其实我只是想把我画的东西擦掉 除了背景图片 然后 我想仅将绘制的图层 图层 保存为图像 在这种情况下 我该怎么办
  • 将 Pyqt GUI 主应用程序作为单独的非阻塞进程运行

    我正在寻找从 python 或 ipython 控制台运行 pyqt GUI 的可能性 基本上 主要思想是使用 Pyqt GUI 就像使用 matplotlib 绘图或图像一样 您可以将参数从控制台传递给 GUI 以查看数据 继续在控制台中
  • 自定义信号的声明

    在 Qt 中 我们可以通过将自定义信号设为静态变量来创建它们 然后我们使用self signame反而classname signame 这样就在类中创建了一个实例变量 我想了解这种模式之外的理论 这是我尝试过的一些伪代码 这些伪代码已记录

随机推荐

  • 进程间通信的五种方式

    进程间通信的意思就是在不同进程之间传递信息 它是一组编程接口 xff0c 让程序员协调不同进程 xff0c 使能够相互传递消息 IPC目的 1 xff09 数据传输 xff1a 一个进程需要将它的数据发送给另一个进程 xff0c 发送的数据
  • Arduino采集Microzone遥控器信号(ROSMicrozoneBridge)

    关注微信公众号 混沌无形 xff0c 后台回复 xff1a 13462F6 免费获取完整工程源码 xff01 本文采用Arduino mega2560的6个外部中断来采集Microzone接收机的6个通道的PPM信号 xff0c 主要是测量
  • 路径规划之基于优化的规划算法

    关注同名微信公众号 混沌无形 xff0c 阅读更多有趣好文 xff01 原文链接 xff1a 机器人曲线插值拟合算法研究现状简述 xff08 包含原文PDF百度云下载链接 xff09 第三类算法是主要是将多目标多变量多约束耦合的规划模型转化
  • 常见移动机器人多角度对比分析

    混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xff09 43篇原创内容 公众号 文末提供原
  • 麦克纳姆轮运动特性分析

    混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xff09 43篇原创内容 公众号 文末提供原
  • 全向轮运动特性分析

    文末提供原文PDF免费下载 期刊论文版式 混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xf
  • matlab稳态和时变卡尔曼滤波器Kalman filter的设计和仿真植物动力学模型案例研究

    最近我们被客户要求撰写关于卡尔曼滤波器的研究报告 xff0c 包括一些图形和统计输出 本案例研究说明了卡尔曼滤波器的设计和仿真 考虑稳态和时变卡尔曼滤波器 植物动力学 考虑一个在输入u n 上有加性高斯噪声w n 此外 xff0c 让 yv
  • 正点原子-操作系统

    正点原子另一个学习网站 http www openedv com docs book videos zdyzshipin 4free zdyz freertos book html
  • 基于stm32的减速直流电机PID算法控制

    本例程采用了HAL库进行项目开发 xff08 主要使用软件CubexMX和keil5 xff09 xff0c 文章末尾会有代码开源 xff0c 欢迎各位对文章进行指正和探讨 基于PID的减速电机控制 一 硬件模块与原理图 1 硬件组成 硬件
  • 记录一次在VM上搭建k8s集群

    安装私有镜像仓库Harbor xff1a https blog csdn net a595077052 article details 119893070 配置k8s的dashboard xff1a https blog csdn net
  • ubuntu 上 docker 安装以及配置VNCserver

    1 install Docker 安装过程 根据docker官网安装过程 根据docker官网 lt a data cke saved href 61 34 https docs docker com install linux docke
  • 【论文阅读笔记】VNect: Real-time 3D human Pose Estimation with a Single RGB

    论文总结 xff1a 文中方法比较简单 xff0c 通过全卷积CNN预测一个heatmap及location map location map实际上就是X Y Z三个方向的坐标图 xff0c 找到关键点的过程为heatmap 中寻找照最大值
  • C++ 曲线平滑

    最近需要将数据通过图表展示出来 xff0c 以便观察其变化趋势 直接展示出来的效果不是很好 xff0c 故在网上查找了很久曲线平滑的方法 xff0c 最终找到了了一套比较适合的方法 xff0c 思路比较简单 xff0c 对于现在的项目来说效
  • (5)传感器驱动程序

    文章目录 前言 1 支持的协议 1 1 I2C 1 2 SPI 1 3 Serial UART 1 4 带有UAVCAN的CAN总线 2 前端 后端分离 3 如何以及何时运行驱动程序代码 4 无人机代码和前端示例 5 UART Serial
  • (11)EKF - (1) 导航综述和调参

    文章目录 前言 1 综述 2 理论 3 调参参数 4 解析日志数据 前言
  • (11)EKF - (1.3) EKF1调参参数

    系列文章目录 11 EKF 1 导航综述和调参 文章目录 系列文章目录 前言 3 1 AHRS EKF USE 3 2 EKF ABIAS PNOISE
  • (11)EKF - (2.7) EKF2调参参数

    系列文章目录 11 EKF 2 EKF2估算系统 文章目录 系列文章目录 前言 7 1 EK2 ENABLE
  • (4)(4.2.4) 连接电调和电机

    文章目录 前言 1 电机顺序图 1 1 四轴旋翼 1 2 三轴旋翼 1 3 翼机 1 4 六轴旋翼 1 5 Y6 1 6 八轴旋翼 1 7 四轴八翼 1 8 六轴十二翼 1 9 自定义框架 1 10 认识顺时针和逆时针的螺旋桨 2 测试电机
  • 【FreeRTOS】FreeRTOS删除任务vTaskDelete()

    使用说明 xff1a 任务中 小时 xff08 任务句柄 t xTask xff09 INCLUDE vTaskDelete必须定义为1 xff0c 才能使用此函数 有关更多信息 xff0c 请参见RTOS配置文档 从RTOS内核管理中删除
  • PyQt5中QSS设置全局StyleSheet的学习

    这阵子在学习PyQt5 xff0c 在学习过程中查阅很多资料和网站内容 现在希望一边学习 xff0c 一边作笔记 xff0c 并分享在互联网上 xff0c 能够给别人带来方便的同时自己也提升得更快 这篇博文主要总结PyQt5中QSS的使用方