【Python随笔】比PyQt5更先进的pyside6安装和使用方法

最近因为自研日常开发工具的需求,决定重新拾起PyQt5之类的桌面工具开发技术栈,为啥选用PyQt,一是因为笔者比较精通python,二是因为不需要在外观上做什么特别的东西。经过一番调研,发现当前的PyQt5版本已经过时,用pyside6会更加贴合现在的需求。因此笔者也简单部署了下pyside6的开发环境,通过这篇文章分享一下如何操作。

先强调一点是,所有的资料都可以在官网查到。如果有特别疑问的地方,参考官网,实在不行就stackoverflow或者gpt,也许可以更快解决问题。

首先是折腾项目工作区。从个人开发角度,笔者推荐所有的桌面开发项目都放在一个pyside6的工作区,并采用venv来安装pyside6相关库和工具。

pyside6的工具有很多,比如把ui文件转化为python代码的pyside6-uic,以及编辑ui的可视化工具pyside6-designer之类。如果是venv安pyside6的话,这些工具都集成到了${project_dir}/.venv/bin下面,有需要的话也可以export到path里,具体作用详细可以参考官网的这份资料。通过这些工具加上一些脚本,就能简单打通ui编辑->ui转码->代码编写->部署发布的开发链路(p.s. 部署发布相关的调研暂时不多)。

代码组织方面,推荐先是把工具类、业务逻辑和ui逻辑几个模块分离开,然后重要一点是,把ui生成代码和实际的window跟widget类给分开来,做到view和model的区分。这样一来是大小层次比较分明,不会出现循环引用的情况,二来是从ui生成的代码,也不会直接影响到已有代码的实现,做改动也是非常方便。以笔者的项目为例,笔者用一个app文件夹来存储所有业务逻辑,通过最外层的main.py驱动app运行:

python 复制代码
import app


if __name__ == '__main__':
    app.run()

然后在app的__init__.py启动整个项目

python 复制代码
APP: Optional[QtWidgets.QApplication] = None


def run():
    global APP
    APP = QtWidgets.QApplication([])

    window = MainWindow()
    window.ensure_center()
    window.show()

    sys.exit(APP.exec())

最后在每个ui类实现里面来初始化跟定义界面逻辑:

python 复制代码
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self._init_actions()
        self._init_widget()

    def _init_actions(self):
        self.ui.actionAbout.triggered.connect(self.show_about)
        self.ui.actionExit.triggered.connect(self.close)

        self.ui.actionSupport.triggered.connect(self.show_support)

    def _init_widget(self):
        # 主动set中心widget,后续可以通过配置化方式灵活设置不同的界面
        self.setCentralWidget(ToolWidget())

    def closeEvent(self, event):  # 关闭窗口时触发
        reply = QMessageBox.question(
            self, '确认', '是否要退出程序?',
            QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
            QMessageBox.StandardButton.Yes)
        if reply == QMessageBox.StandardButton.Yes:
            event.accept()
        else:
            event.ignore()

以上便是一个简单的pyside6安装和使用方法。后面如果探索到一些新的东西,再拿出来分享~

相关推荐
爱吃烤鸡翅的酸菜鱼1 天前
【Java】封装位运算通用工具类——用一个整数字段替代几十个布尔列,极致节省存储空间
java·开发语言·设计模式·工具类·位运算·合成复用原则
2201_756847331 天前
mysql字段长度不够用了怎么办_使用alter table扩大varchar长度
jvm·数据库·python
xinhuanjieyi1 天前
php给30支NBA球队添加logo图标,做好对应关系
android·开发语言·php
祁_z1 天前
Python项目依赖管理:venv与conda
python
菜菜小狗的学习笔记1 天前
八股(三)Java并发
java·开发语言
overmind1 天前
oeasy Python 120[专业选修]列表_直接赋值_浅拷贝_shallowcopy_深拷贝_deepcopy
linux·windows·python
史迪仔01121 天前
[QML] 交互事件深度解析:鼠标、键盘、拖拽
前端·c++·qt
ZC跨境爬虫1 天前
海南大学交友平台开发实战 day11(实现性别图标渲染与后端数据关联+Debug复盘)
前端·python·sqlite·html·json
星星也在雾里1 天前
Anaconda命令行配置Jupyter Notebook虚拟环境
python·jupyter
极光代码工作室1 天前
基于机器学习的信用卡欺诈检测系统设计
人工智能·python·深度学习·机器学习