一、python gui工具对比

  • Tkinter – Tcl/Tk的python接口,python标准库自带不需单独安装。但界面相对简陋,基础组件不全,框架功能相对较弱,使用不多
  • wxPython – wxWidgets的python封装接口
  • PySimpleGUI – 对tkinter, Qt, WxPython等python gui框架的进一步封装
  • PyQt – Riverbank Computing公司发布的对QT框架的python封装,GPL授权
  • PySide – QT官方发布的QT python封装,LGPL授权,可以闭源发布。 qt官方给出的Pyside和PyQt差异,除了包名、工具名外,大部分差别不大

从目前使用情况来看,PyQt使用的比较多,但PyQt是GPL授权,而PySide是LGPL授权,其功能与PyQt区别不大,但可以闭源发布。量化软件vnpy最新版使用的就是pyside6,下文主要介绍pyside6。

二、pyside6介绍

  1. 安装

安装前提:Python 3.6+。使用venv或conda创建一个新的python环境。

1
2
conda create -n qt python=3.8
conda activate qt

or

1
2
python -m venv pyside
source pyside/bin/activate

然后使用pip安装pyside6

1
2
pip install pyside6 # 安装最新版本
pip install pyside6==6.0 # 安装6.0版本

测试安装是否成功

1
2
3
4
5
>>> import PySide6.QtCore
>>> print(PySide6.__version__)
6.2.1
>>> print(PySide6.QtCore.__version__)
6.2.1

除了pyside6 lib库安装好外,还安装了pyside6-designer、pyside6-uic、pyside6-rcc等工具。

  • pyside6-uic: 从.ui文件生成python代码,pyside6-uic -i form.ui -o ui_form.py
  • pyside6-rcc: 从.qrc文件生成python代码,pyside6-rcc -i resources.qrc -o rc_resources.py
  • pyside6-designer: Qt Designer对应的命令行程序,用于编辑/创建.ui文件

2. hello qt程序

将下列代码保存为hello_py.py,在终端运行python hello_py.py即可。

1
2
3
4
5
6
7
import sys
from PySide6.QtWidgets import QApplication, QLabelapp = QApplication(sys.argv)
label = QLabel("Hello Qt for Python!")
label.show()
app.exec()

说明:

  • QLabel是一个可以展示文本和图片的组件,文本可以是普通文本或富文本,比如html
  • QApplication app.exec()进入Qt主循环并且开始执行Qt代码

3. 开发环境

  • vs code安装插件:Qt for Python
  • qt creator
  • pycharm配置外部工具

4. 核心概念

  • Qt包括很多组件和模块,比如qtbase是一个包含很多模块的基础组件,它包含的module有:QtCore, QtGui, QtWidgets, QtNetwork等。所有这些module包含了很多你可以直接使用的类,比如QtCore里面包含了QFile, QTime, QByteArray等类。

  • QtWidgets是一个提供了很多预定义Widgets的模块,这些Widgets你可以添加到图形应用程序里面,包括Buttons, Labels, Boxes, Menus等。

  • QML提供了另外一种不同于Widgets的创建用户界面的方法,它首先的动机是应用于移动应用开发,但也可以在桌面应用开发中使用。QML跟Qt Quick模块一起,提供了使用点击、拖放、动画、过渡等与移动设备交互的方式。你可以在QML/Quick应用中找到的元素都聚焦于提供更现代的应用中

Qt基本模块有三部分:

  • QtCore: 提供了核心的非GUI功能,比如signal和slots,properties,序列化等
  • QtGui: 在GUI功能上扩展了QtCore的功能,比如:Events, windows and screens, OpenGL and raster-based 2D绘图,还有图片
  • QtWidgets: 提供了现成的组件,包括UI的图形元素

QML and Qt Quick使用这些模块从python跟QML语言交互

  • QtQML: 跟模块交互的基础python api
  • QtQuick: 在Qt应用中提供了类嵌入Qt Quick
  • QtQuickWidgets: 在基于widget的应用中提供了QQuickWidget类来前乳Qt Quick
  • Shiboken模块:使用python来扩展Qt/C++ 应用

5. Qt Widgets

  • signals and slots: 用于QObject对象之间的通信。按钮点击时,click就是信号,槽位是当按钮被点击时发生的事情,比如关闭窗口,保存文件等。类似于其他的callback回调,但回调不是很自然
  • 所有继承自QObject或它的子类的类(比如QWidget)都可以包含信号和槽位。当对象改变状态,且这个状态其他对象感兴趣时,对象可以发出信号
  • 槽位可以用于接收信号,但他们也是普通成员函数。就像一个对象不知道是否有对象接收了它的信号一样,一个槽位也不知道是否有信号连接到它了。这确保了可以用Qt来创建真正独立的组件
  • 一个槽位可以连接任意多的信号,一个信号也可以连接到任意多的槽位。连接一个信号到另外一个信号也是可能的
  • Qt widgets有许多预定义的信号和槽位,你可以创建继承自PySide6 widgets的任何类
  • Qt 自带的layout-support功能可以帮你在应用程序中组织widgets。QVBoxLayout用于垂直布局widgets,QTableWidget用于以表格形式展示信息, QTreeWidget,QTreeView用树的形式展示信息

6. 使用ui文件

  • Qt Designer时一个图形UI设计工具,可以使用 Qt Designer基于Qt Widgets创建图形界面,它作为一个单独程序pyside6-designer或者嵌入到Qt Creator IDE。Using Qt Designer.设计存储在.ui文件中,是基于XML格式的文档. 可以使用pyside6-uic在编译时将设计转换成python/c++代码。

  • 可以使用QtUiTools模块里面的类来直接加载ui文件

  • 从Designer或QtCreator用QUiLoader和pyside6-uic使用.ui文件

7. 其他功能

  • Using .qrc Files (pyside6-rcc) – Qt资源系统是一个可以用来在应用程序中存储二进制文件的机制,这些文件可以嵌入到应用程序并且可以被QFile类和QIcon、QPixmap类的构造函数来访问,文件名用:/来开始。最常见的使用情况时自定义的图片、图标、字体等

  • Qt Linguist和它相关的工具可以用来提供应用程序多语言的翻译功能,参考Translating Applications

  • Qt Widgets应用使用一个依赖于底层平台的默认主题。在某些情况,存在一些系统范围的配置可以用来修改Qt主题,也可以自己的widgets并为每个组件提供一个自定义的style. 参考Styling the Widgets Application

  • QML是一个声明式语言,可以让你比传统语言(c++)更快的开发应用程序。由于它的声明特性,非常适合设计应用程序的UI。在QML,一个用户界面被指定为带有属性的对象树

  • 一个PySide6/QML应用程序由至少2个不同的文件组成–一个是QML描述的用户界面文件,另外一个是用于load QML文件的python文件。QtQml和QtQuick模块提供了基于QML的UI的必要功能

  • Shiboken 擅长Qt相关的binding生成,这意味着任何Qt/C++项目可以很容易暴露给python。另外,Shiboken也提供了对于非Qt的c++项目的支持

三、进阶

  • 费用工具教程
  • 更多pyside示例–在pyside6安装环境site-packages/PySide6/examples目录下,包括3d、画图、多媒体、网络、数据可视化等多个分类
  • vnpy qt

四、交流

我发文章的几个地方,欢迎关注公众号,文章会优先发布在公众号上。

  • 微信公众号:诸葛说talk
  • 博客:量化小站

参考

  • 为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?
  • PyQt和PySide的历史渊源
  • Qt for Python官方完整教程
  • Qt for Python快速开始 – pyside6快速开始
  • pyside概念篇
  • pyside所有模块
  • pyside教程–包括Qt Widgets、Quick/QML、General Applications基础教程
  • 将应用程序分发到其他系统/平台 – 使用fbs、PyInstaller、cx_Freeze、briefcase、py2exe、Nuitka等工具打包python程序
  • 模型/视图编程
  • fbs – fbs解决了常见的打包和部署问题,基于Python和Qt, fbs是Electron的一个轻量级替代品
  • electron – 非python。使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
  • electron-vue – 非python。 使用vue构建electron应用的模版项目

python gui与pyside相关推荐

  1. python gui框架_Python的GUI框架PySide的安装配置教程

    (一)说在前面 Python自带了GUI模块Tkinter,只是界面风格有些老旧.另外就是各种GUI框架了. 之前安装过WxPython,并做了简单的界面.遂最近又重新搜索了一下网上关于Python ...

  2. Python的GUI框架PySide

    PySide学习笔记 PySide安装 Python自带了GUI模块Tkinter,只是界面风格有些老旧. Python的Qt有PyQt和PySide吧.PyQt 是商业及 GPL 的版权, 而 Py ...

  3. python的gui库哪个好_常用的13 个Python开发者必备的Python GUI库

    [Python](http://www.blog2019.net/tag/Python?tagId=4)是一种高级编程语言,它用于通用编程,由Guido van Rossum 在1991年首次发布.P ...

  4. Python GUI漫谈

    Windows下面做C++那会用惯了MFC,对框架产生了依赖,使用框架虽然占用了很多不必要的系统资源,也拖慢了程序的运行效率,但是做个demo什么的往框框里填点代码就可以的确很方便.而且对我来说,这样 ...

  5. php图形界面框架,python GUI 图形化界面框架的选择

    根据网上资料的显示目前流行的开源python GUI有以下几个 (以下GUI框架适用于应用的GUI,如果采用WEB方式,UI可使用h5相关标签即可,也可以用框架.): PyQt 的介绍 : http: ...

  6. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...

  7. Python开发者必知的 11 个 Python GUI 库,你用过几个?

    Python是一种高级编程语言,它用于通用编程,由Guido van Rossum 在1991年首次发布.Python 的设计着重于代码的可读性. Python有一个非常大的标准库,并且有一个动态类型 ...

  8. Python界面编程第二课:Pyside2 创建窗口 (Python GUI)

    Pyside2 创建窗口 (Python GUI) – 在这篇Pyside2文章中,会演示如何创建窗口,学习本课之前请先看第一课<我们开始用Pyside2 (Qt For Python)> ...

  9. Python GUI界面开发软件综述

    参考致谢: 28款Python GUI开发框架开源软件 https://www.cnblogs.com/muziyunxuan/archive/2017/12/26/8117875.html Py之G ...

  10. 13 个Python开发者必知的Python GUI库

    Python Python是一种高级编程语言,它用于通用编程,由Guido van Rossum 在1991年首次发布.Python 的设计着重于代码的可读性. Python有非常大的标准库,并且有着 ...

最新文章

  1. 自动驾驶中图像与点云融合的深度学习研究进展综述
  2. kosaraju算法
  3. R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)
  4. python怎么开发软件_怎么使用python进行软件开发
  5. chrome切换前端模式_Chrome调试工具developer tool技巧 - 轩枫阁
  6. 一款非常简约好看的白色网格个人引导页HTML源码
  7. svn ignore 的用法
  8. 关于win7启动看不到桌面的解决方法
  9. OK335xS psplash Screen 移植
  10. 针对建筑设计开发的CAD软件——ARCHICAD 24 for mac
  11. Linux 镜像文件
  12. 搜狗双拼--提升打字效率
  13. 职称计算机word中文字处理,职称计算机考试:Word97中文字处理
  14. 编写一个简单加密程序!!!
  15. 微信小程序小说云开发免费源码
  16. DP/eDP协议学习--视频传输格式
  17. Installation failed due to: ‘‘cmd package install-create -r -t --user current --full --dont-kill -t
  18. 荣耀20搭载鸿蒙,荣耀20新机发布 搭载鸿蒙系统荣耀20详细参数
  19. 了解Intel IPP
  20. RuntimeError: NCCL error in:torch/lib/c10d/ProcessGroupNCCL.cpp:514, invalid usage, NCCL version 踩坑

热门文章

  1. 提升Windows xp系统运行速度的九大技巧
  2. Win10 dell驱动触摸板安装
  3. dns按来路ip智能解析_智能解析_智能DNS解析_操作指南_云解析 DNS - 阿里云
  4. 7-Zip下载|7-Zip下载
  5. js加载flv格式视频
  6. oracle roseha 配置,RoseHA8.5 for Windows Oracle11g配置文档
  7. 社会工程学之黑客番外——密码学
  8. 小程序的学习资料收集
  9. JAVA游戏死神之谜下载_诸神战纪二-死神之谜BT版
  10. 智慧城市——智慧社区解决方案