QT 战略上的失败不代表 QT 不是好的框架
我认为 QT 至少是一个方便的框架,特别是与 python 结合。
众所周知,”人生苦短,我用 python“,主打垃圾代码但能用,pyqt 能在极短时间构建一个足够实用的桌面软件工具。
当然在我的信条里,能用并不足够,起码界面设计不能辣眼。
此时我们的主角堂堂登场,来自zhiyiYo (之一)大佬的组件库。
大佬也开源了自己的博客框架,但并不是简洁而不简单的那个类型
浅截一些演示程序中的操作(gif 不要在意),实际效果是非常好的。
已经非常接近 windows 原生的设计语言了,为此我甚至专门看了一下微软 fluentui 的设计手册,很难想象这是使用 QT 实现的
在官方文档中有详细的说明,这里特别注意的是,个人建议使用pyside2框架,由于 QT 系列仍然存在版权争议,同时我们这类工程师通常不需要更现代化或者更高级的组件功能支持,pyside2足够使用了,不同代系之间的语法和 API 稍有不同,不在最初定下最合适的框架后续会带来麻烦。
pip install "PySide2-Fluent-Widgets[full]" -i https://pypi.org/simple/
另外需要注意的是,组件库之间最好不要混用。如果另添加美化库,建议只做 QSS 替换类型的美化就好,甚至 QSS 替换有时也会带来未知的冲突,目前还没有找到仅颜色替换的库。
使用 QT-Fluent-Widgets 需要完全在它的框架下使用全组件才有优秀的显示效果,如果使用自己开发的组件会非常不方便。如果仅使用 Fluent 样式,而希望使用带有自己定制功能的组件,可以结合使用 Qt-Material。
pip install qt-material
Qt-Material — Qt Material documentation
Qt-Material 的优先级很高,会完全接管 Fluent 的 QSS。
使用 redis 进行前后端分离
有如下的 redis 免安装版
Releases · microsoftarchive/redis (github.com)
将免安装版集成进后端程序源码中,其中包含可执行文件,并且进行一些小小的包装。
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