风过空庭,字句正徐来。
关于关于本站关于我给我点钱
更多时间线友链文件服务wiki
联系写留言发邮件GitHub
© 2024-2026 yono. | RSS 订阅 | 站点地图 | | Stay hungry. Stay foolish.
Powered by Mix Space&
白い
.
| 粤 ICP 备2024284785号-1 |
正在被0人看爆
纸白微明,未成篇章。

好看的 pyqt 组件库——PyQt-Fluent

(已编辑)
/
227
AI·GEN

关键洞察

这篇文章上次修改于,可能部分内容已经不适用,如有疑问可询问作者。

好看的 pyqt 组件库——PyQt-Fluent

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • 库介绍

    QT 战略上的失败不代表 QT 不是好的框架

    我认为 QT 至少是一个方便的框架,特别是与 python 结合。

    众所周知,”人生苦短,我用 python“,主打垃圾代码但能用,pyqt 能在极短时间构建一个足够实用的桌面软件工具。

    当然在我的信条里,能用并不足够,起码界面设计不能辣眼。

    此时我们的主角堂堂登场,来自zhiyiYo (之一)大佬的组件库。

    大佬也开源了自己的博客框架,但并不是简洁而不简单的那个类型

    浅截一些演示程序中的操作(gif 不要在意),实际效果是非常好的。

    已经非常接近 windows 原生的设计语言了,为此我甚至专门看了一下微软 fluentui 的设计手册,很难想象这是使用 QT 实现的

    240719 200839

    240719 200839

    如何使用

    在官方文档中有详细的说明,这里特别注意的是,个人建议使用pyside2框架,由于 QT 系列仍然存在版权争议,同时我们这类工程师通常不需要更现代化或者更高级的组件功能支持,pyside2足够使用了,不同代系之间的语法和 API 稍有不同,不在最初定下最合适的框架后续会带来麻烦。

    pip install "PySide2-Fluent-Widgets[full]" -i https://pypi.org/simple/
    

    安装 | QFluentWidgets

    另外需要注意的是,组件库之间最好不要混用。如果另添加美化库,建议只做 QSS 替换类型的美化就好,甚至 QSS 替换有时也会带来未知的冲突,目前还没有找到仅颜色替换的库。

    可结合的库

    改变 QSS 的库

    使用 QT-Fluent-Widgets 需要完全在它的框架下使用全组件才有优秀的显示效果,如果使用自己开发的组件会非常不方便。如果仅使用 Fluent 样式,而希望使用带有自己定制功能的组件,可以结合使用 Qt-Material。

    CodeBlock Loading...

    Qt-Material — Qt Material documentation

    Qt-Material 的优先级很高,会完全接管 Fluent 的 QSS。

    数据库组件

    使用 redis 进行前后端分离

    有如下的 redis 免安装版

    Releases · microsoftarchive/redis (github.com)

    将免安装版集成进后端程序源码中,其中包含可执行文件,并且进行一些小小的包装。

    CodeBlock Loading...
    pip install qt-material
    
    PYTHON
    import subprocess
    import redis
    import os
    
    
    class uRedisServer():
        def __init__(self):
            # Redis服务器和配置文件的路径
            self.redis_server_path = os.path.join(".", "ExTools/Redis", "redis-server.exe")
            self.redis_conf_path = os.path.join(".", "ExTools/Redis", "redis.windows.conf")
            self.redis_port = 6379
            # Redis服务器进程的保存,便于后期操作此进程
            self.RedisProcess = None  # 用于存储Redis进程
    
        def Open(self):
            try:
                self.RedisProcess = subprocess.Popen([self.redis_server_path, self.redis_conf_path], stdout=subprocess.PIPE)
                return True
            except Exception as e:
                return False
    
        def Close(self):
            try:
                if self.RedisProcess is None:
                    return False
                self.RedisProcess.terminate()  # 尝试优雅地关闭Redis服务器
                self.RedisProcess = None
            except Exception as e:
                return False