品牌型号:联想拯救者R7000
系统:Windows 10专业版
软件版本:PyQt 5.15.11
我们在用Python开发桌面应用程序时,可能会遇到这样一个需求:需要图形界面给用户操作,还需要在界面中嵌入数据可视化图表,来展示数据分析结果。PyQt是Python生态中功能全面的GUI框架,搭配matplotlib能实现数据可视化,满足这类场景。本文将为大家介绍PyQt怎么嵌入matplotlib,PyQt如何设计应用程序界面的相关内容。
一、PyQt怎么嵌入matplotlib
在PyQt中嵌入matplotlib图表,需要借助matplotlib提供的Qt后端,将图表画布封装为PyQt的QWidget控件,将图表画布对象作为PyQt的原生控件来使用。PyQt中有一个FigureCanvasQTAgg类,该类继承自QWidget,可以直接添加到PyQt窗口的布局中。PyQt中嵌入matplotlib的步骤如下。
1、根据使用的PyQt版本导入对应的后端模块,PyQt6是从【matplotlib.backends.backend_qtagg】导入。

2、创建一个继承自FigureCanvasQTAgg的自定义画布类,在初始化方法中构造matplotlib的Figure对象。
3、通过add_subplot()添加绘图区域,绘图逻辑写在自定义类的方法中,调用plot()、bar()、scatter()等函数生成折线图、柱状图或散点图。

4、执行draw()方法刷新画布,将实例化后的画布对象传入窗口的布局管理器,图表便会显示在界面中。

例如我们需要开发一套温度监控系统,主窗口划分为上下两个区域,上方放置采样频率设置、启动停止按钮等控制组件,下方嵌入一个实时更新的温度曲线图。每次传感器回传数据时,程序接收到数据后实时渲染到matplotlib图表,调用画布的更新方法实现数据刷新,即可实现显示的实时曲线。

此外,matplotlib自带的NavigationToolbar2QT工具栏也可以嵌入,我们就不需要额外写框选缩放、平移拖拽和导出图片等功能,只需要将canvas实例传入工具栏构造函数即可。

二、PyQt如何设计应用程序界面
PyQt设计界面有两种方式:纯代码手写布局,或者借助Qt Designer可视化设计工具。两种方式可以结合使用,根据项目规模和复杂度选择,下面我就为大家介绍一下这两种设计应用程序桌面的方式。
1、纯代码方式需要借助PyQt提供的布局管理器。例如QHBoxLayout是将控件水平排列,QVBoxLayout垂直堆叠等。我们需要通过代码嵌套组合这些布局,绘制想要的界面结构。例如,设计数据分析工具时,左侧用QTreeWidget设置文件目录树,右侧用QVBoxLayout垂直划分为顶部的参数配置栏和底部的图表区域,控件间距和对齐方式可以通过addStretch()和setSpacing()进行微调。

界面与逻辑的交互需要借助【信号与槽机制】,PyQt中每个控件都有多种信号,如按钮的clicked信号、下拉框的currentIndexChanged信号等,做前端开发的程序员并不陌生这些“信号”。我们需要编写槽函数(普通Python代码逻辑)并通过connect()方法与信号绑定,就能实现具体业务功能。

例如上图中的代码,点击【导入数据】按钮,信号触发槽函数弹出QFileDialog文件选择框,弹出的效果如下图。限制只能选择CSV文件,选择文件后,槽函数调用pandas解析数据并提取数据,实现完整的业务功能。

2、如果使用Qt Designer绘制界面,是通过拖拽控件的方式搭建页面原型,控件位置和大小可以借助拖动调整,生成的是【.ui文件】,可以通过【pyuic】命令行工具转换成py代码。

三、总结
以上就是PyQt怎么嵌入matplotlib,PyQt如何设计应用程序界面的相关内容。我们可以继承 FigureCanvasQTAgg,生成一个可以直接放入布局中的画布控件。并且该控件提供了tool bar可以直接使用,文中为大家介绍了显示效果。设计PyQt和应用程序界面时,有两种方式,根据自己的业务规模和人员组成选择即可,希望对你有所帮助。