当前位置: 首页 > news >正文

【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运行:

import appif __name__ == '__main__':app.run()

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

APP: Optional[QtWidgets.QApplication] = Nonedef run():global APPAPP = QtWidgets.QApplication([])window = MainWindow()window.ensure_center()window.show()sys.exit(APP.exec())

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

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安装和使用方法。后面如果探索到一些新的东西,再拿出来分享~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【使用Python和ADB过滤与处理Android包名】
  • SAAMDSSA-系统架构师(五十一)
  • Go开发后端和Vue3开发前端的前后端分离框架中自己手戳一个OA流程审批、工作流引擎给新时代一个漂亮便捷的工作流引擎
  • 验证码案例
  • UE中的运行时Mesh - 学习笔记
  • day16
  • Nginx系列-Nginx Location匹配规则
  • 【鸿蒙学习】Stage模型与FA模型的对比与应用选择
  • Spring Boot 3.x Rest API最佳实践之统一响应结构
  • 作为硬件工程师和射频工程师必备的射频前端冷知识
  • 提升前端性能的JavaScript技巧
  • 异步调用实践:Async,Future, TaskExecutor、EventListener
  • 网络编程----TCP/IP协议
  • scrcpy源码 windows10编译傻瓜式教程
  • 字符串查找 - 模拟实现strstr 、BF算法 、 KMP算法
  • Docker容器管理
  • HashMap ConcurrentHashMap
  • HTTP中GET与POST的区别 99%的错误认识
  • javascript 总结(常用工具类的封装)
  • js继承的实现方法
  • Protobuf3语言指南
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • uva 10370 Above Average
  • vue.js框架原理浅析
  • 从零开始的无人驾驶 1
  • 解决iview多表头动态更改列元素发生的错误
  • 软件开发学习的5大技巧,你知道吗?
  • 微服务入门【系列视频课程】
  • - 转 Ext2.0 form使用实例
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # Panda3d 碰撞检测系统介绍
  • # SpringBoot 如何让指定的Bean先加载
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (含笔试题)深度解析数据在内存中的存储
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十五)使用Nexus创建Maven私服
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)Dubbo快速入门、介绍、使用
  • (一)VirtualBox安装增强功能
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *Django中的Ajax 纯js的书写样式1
  • .“空心村”成因分析及解决对策122344
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 版本不支持的问题