草庐IT

PyQt5 主题美化

迷途小书童的Note 2023-10-13 原文

软硬件环境

  • Windows 10 64bit

  • Anaconda3 with python 3.8

  • PyQt5 5.15

  • qt-material 3.0.1

前言

嫌自己画的 UI 界面太丑?一个个控件单独调整样式表太麻烦?那就试试本篇介绍的这个样式工具,qt-material,它看起来类似于 Material Design,除了支持 PyQt5,它还支持 PyQt6PySide6PySide2GUI 框架。

安装

使用 pip 安装

pip install qt-material

实操

库的使用,还是很简单的

# 导入模块
from qt_material import apply_stylesheet

# 在app实例化之后,应用样式
apply_stylesheet(app, theme='default_dark.xml')

我们看看一个简单 UI 界面的前后区别

qt-material 自带了很多的主题,可以通过方法 list_themes 来查看

'dark_amber.xml', 
'dark_blue.xml', 
'dark_cyan.xml', 
'dark_lightgreen.xml', 
'dark_pink.xml', 
'dark_purple.xml', 
'dark_red.xml', 
'dark_teal.xml', 
'dark_yellow.xml', 
'light_amber.xml', 
'light_blue.xml', 
'light_blue_500.xml', 
'light_cyan.xml', 
'light_cyan_500.xml', 
'light_lightgreen.xml', 
'light_lightgreen_500.xml', 
'light_orange.xml', 
'light_pink.xml', 
'light_pink_500.xml', 
'light_purple.xml', 
'light_purple_500.xml', 
'light_red.xml', 
'light_red_500.xml', 
'light_teal.xml', 
'light_teal_500.xml', 
'light_yellow.xml'

如果是使用 light 类型的主题,需要在 apply_stylesheet 中使用参数 invert_secondary,并将其设置为 True (默认值是 False)

apply_stylesheet(app, theme='light_blue.xml', invert_secondary=True)

除此之外,还有个非常有用的参数 extra,它一般用来自定义颜色和字体

extra = {

    # Button colors
    'danger': '#dc3545',
    'warning': '#ffc107',
    'success': '#17a2b8',

    # Font
    'font_family': 'Roboto',
}

apply_stylesheet(app, 'light_cyan.xml', invert_secondary=True, extra=extra)

然后就可以在 PyQt5 的控件中来使用了,如

# 登录按钮使用 danger 的红色
self.pushButton_login.setProperty('class', 'danger')

最后,来看看如何创建自己的主题。首先来到本地环境中主题文件所在的目录,也就是 xml 文件所在的目录

随便拷贝一个 xml,然后重命名一下,比如 dark_custom_theme.xml

接着来修改一下该文件的内容,16进制的颜色值,大家可以到这个站点来选择 https://imagecolorpicker.com/,比较省心

<!--?xml version="1.0" encoding="UTF-8"?-->
<resources>
  <color name="primaryColor">#2596be</color>
  <color name="primaryLightColor">#ffff74</color>
  <color name="secondaryColor">#abdbe3</color>
  <color name="secondaryLightColor">#4f5b62</color>
  <color name="secondaryDarkColor">#e28743</color>
  <color name="primaryTextColor">#000000</color>
  <color name="secondaryTextColor">#ffffff</color>
</resources>

xml 修改完毕,就可以在代码里使用了

apply_stylesheet(app, 'dark_custom_theme.xml')

更多资料请参考官方网站 https://github.com/UN-GCPDS/qt-material

有关PyQt5 主题美化的更多相关文章

  1. ruby-on-rails - 在暂存环境中覆盖 ActionMailer 主题 - 2

    我希望从我们的登台服务器发送的所有电子邮件的主题中都带有“[STAGING]”字样。在Rails3.2中使用ActionMailer是否有一种优雅的方式来做到这一点? 最佳答案 这是我使用ActionMailerInterceptor找到的一个优雅的解决方案基于anexistinganswer.#config/initializers/change_staging_email_subject.rbifRails.env.staging?classChangeStagingEmailSubjectdefself.delivering_

  2. ruby - 如何检查我的主题是否引发异常? - 2

    我目前正在subject中创建一个对象,需要测试这是否会引发异常。以下代码说明了我要实现的目标:describeMyClassdodescribe'#initialize'dosubject{MyClass.new}it{is_expected.not_toraise_error(Some::Error)}endend我有一种感觉,我正在以错误的方式处理这件事。将subject设置为新对象而不创建对象两次的首选方法是什么?更新我的问题有两个。首先,这种语法不起作用:it{is_expected.not_toraise_error}但是,在itblock中使用expect确实如此(正如J

  3. kafka如何动态消费新增topic主题 - 2

    一、解决痛点使用spring-kafka客户端,每次新增topic主题,都需要硬编码客户端并重新发布服务,操作麻烦耗时长。kafkaListener虽可以支持通配符消费topic,缺点是并发数需要手动改并且重启服务。对于业务逻辑相似场景,创建新主题动态监听可以用kafka-batch-starter组件二、组件能力1、新增topic名称为:auto.topic1(由于配置spring.kafka.consumer.prefix为auto,因此只有auto前缀的topic,才会被组件动态监听。)2、应用输出日志,监听到新增auto.topic1,并初始化客户端(主题刷新间隔为10s)3、发新的消

  4. ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域 - 2

    我正在使用适用于Ruby的AWS开发工具包向Rails3应用程序发布消息和AWSSNS主题,如下所示:sns=AWS::SNS.newtopic=sns.topics['arn:aws:sns:eu-west-1:55555555555:my_topic']topic.publish("MESSAGE",:subject=>"SUBJECT")当我发布到“us-east-1”中的主题时,它按预期工作,但发布到“eu-west-1”区域中的主题时不起作用:AWS::SNS::Errors::InvalidParameter-Invalidparameter:TopicArn:使用AWSS

  5. ruby-on-rails - 如何处理 UTF-8 电子邮件 header (如主题 :) using Ruby? - 2

    我是一个电子邮件n00b,但我正在开发一个发送带有Unicode字符的HTML电子邮件的应用程序(正如我friend所说的“享受编码hell”)。Subject:header来自用户输入,因此可能包含Unicode字符。一些邮件客户端(如GMail和Outlook2007)对此没有问题,但从我的阅读来看,执行此操作的正确方法似乎是使用MIMEEncoded-Wordencoding对于标题。我找不到Ruby库来执行此操作。有吗?此外,是否有要添加的header告诉邮件客户端在显示消息时使用UTF-8?我们要发送多部分电子邮件,所以我们的Content-Type是multipart/mi

  6. ruby - 编写代码美化器 - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我想写一个代码美化器,我想用Ruby来做。有人可以告诉我一个开始的地方吗?我在网上看到了很多代码美化器,但是我从来没有遇到过任何关于如何编写代码美化器的教程。对于以前从未从事过任何项目(例如编写编译器、解析器等)的人来说,这是一项非常具有挑战性的任务吗?(除了C/C++之外,还有其他更适合这种任务的语言吗?)

  7. ruby-on-rails - 如何更改 "Devise: password reset instruction email' 的主题” - 2

    我只是无法更改“密码重置说明”电子邮件的主题。我更改了Mailer中的notifer.rb以覆盖Devise默认电子邮件主题。但它不起作用。在我的应用程序中,Devise.yml文件中有默认的电子邮件主题。但我想通过从数据库中提取数据来动态更改它。 最佳答案 可以在intilizer目录下的devise.en.yml文件中修改并为任何邮件设置您自己的主题mailer:confirmation_instructions:subject:'Confirmationinstructions'reset_password_instructi

  8. PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解) - 2

    目录一、打开数据库表1.写打开数据库的槽函数2.运行后发现数据库可以打开了

  9. Ruby代码美化,将长指令拆分成多行 - 2

    我们如何编写下面的语句来提高可读性?Promotion.joins(:category).where(["lft>=?andrgt{:shop_id=>shops_id}).count('id',:distinct=>true)以下不编译Promotion.joins(:category).where(["lft>=?andrgt{:shop_id=>shops_id}).count('id',:distinct=>true)syntaxerror,unexpected'.',expectingkEND.where(["lft>=?andrgt 最佳答案

  10. ruby - 在现有的 Jekyll 安装中切换主题 - 2

    Jekyll有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.在现有的Jekyll安装中切换到新主题的最简单方法是什么? 最佳答案 这是我为更改现有Jekyll安装的主题所做的。调整这些说明以满足您的需要。拉新主题我们创建一个新的孤立分支newtheme并确保它是空的。gitcheckout--orphannewthemegitrm-rf.gitclean-dfx然后我们通过将主题添加为上游远程来将主题文件拉入其中。在此示例中,我拉取了JohnOtander的Pixyll主题的

随机推荐